VBAでワークシート関数のSUM関数の使い方についてご説明します。
ワークシート関数の「SUM」を使用する事で、簡単に指定した範囲の合計を算出する事ができます。
Excelで非常に利用頻度の高い馴染みのある関数かと思います。
単純な合計ですが、VBAでSUM関数を再現するのは意外と面倒ですし、データ量次第ではSUM関数を使用するよりも処理速度が遅くなります。
ExcelVBAの利点はワークシートという高機能なアプリケーションを、最初から使える事です。
そして、最大の利点はExcelに用意されている関数を使える事です。
その関数の一つ、「SUM関数」の使い方についてご説明します。
少し応用した、複数の離れた範囲を合計する方法は「SUM関数で複数の離れた範囲の合計を算出する方法」をご覧下さい。
1.SUM関数とは
SUM関数は指定した範囲の合計を返す関数です。
膨大なデータから指定した範囲の合計を瞬時に算出してくれる非常に便利な関数です。
一つなぎのデータ範囲はもちろんですが、離れたデータ範囲を指定しても合計を求めることが可能です。
SUM関数の欠点
非常に便利な関数ですが、1点注意する事があります。
もし範囲に加算できないデータがあった場合・・・。
計算出来ない値を無視して合計が算出されるため、なかなか気づけません。
予め範囲に数値以外の計算できない値がないことが把握出来ていれば、特に回避する処理は不要ですが、そうではない場合は回避する処理を組み込む必要があります。
2.SUM関数の使い方
SUM関数は次のように記述します。
SUM(範囲)
「範囲」には合計したい範囲を指定します。
離れた範囲を指定する場合は、次のように記述します。
離れたセルの範囲を指定する場合は「Unionメソッド」を使用して、範囲を結合する必要があります。
SUM(Union(範囲1,範囲2))
VBAで利用するには次のように記述します。
Application.WorksheetFunction.SUM(範囲)
3.サンプルコード
そのまますべて記述する基本的な方法から、範囲を変数に入れて処理する方法、離れた範囲を指定する方法、ループする方法などいくつかのケースのサンプルコードです。
次のようなデータを使用して、それぞれのケースに応じた合計の算出方法を掲載します。
基本的なサンプルコード
まずは単純に「A列」の最終行に合計を出力するコードです。
Cellsの場合
Cellsの場合は範囲を「Range(Cells(1, 1), Cells(10, 1))」と記述します。
Sub Smaple1()
Cells(11, 1) = Application.WorksheetFunction.Sum(Range(Cells(1, 1), Cells(10, 1)))
End Sub
Rangeの場合
Rangeの場合は範囲を「Range(“A1:A10”)」と記述します。
Sub Smaple2()
Range("A11") = Application.WorksheetFunction.Sum(Range("A1:A10"))
End Sub
範囲を変数に入れて合計するサンプルコード
範囲を変数に入れると関数の引数の範囲がとてもシンプルになります。
Sub Smaple3()
Dim MyRng As Range
Set MyRng = Range(Cells(1, 1), Cells(10, 1))
Cells(11, 1) = Application.WorksheetFunction.Sum(MyRng)
End Sub
複数列を合計するサンプルコード
先ほどはA列のみを合計しましたが、A~C列まで合計したいと思います。
先ほどのA列の範囲を「Range(Cells(1, 1), Cells(10, 3))」とCells(10,3)とすることで「A1~C10」までを範囲にしました。
Sub Smaple4()
Dim MyRng As Range
Set MyRng = Range(Cells(1, 1), Cells(10, 3))
Cells(11, 1) = Application.WorksheetFunction.Sum(MyRng)
End Sub
ループで各列を合計するサンプルコード
次は各A~C列をループで合計する方法です。
ループする方法については「「For~Next」「For Each In Next」「Do~Loop」 ループの使い方」をご覧ください。
範囲を列でループするため「Range(Cells(1, i), Cells(10, i))」と列の番号を変数「i」に変更しています。
「Cells(11, i) = Application.WorksheetFunction.Sum(MyRng)」の Cells(11, i) も出力列を変更するため列の番号を「i」と変数にしています。
Sub Smaple5()
Dim MyRng As Range
Dim i As Long
For i = 1 To 3
Set MyRng = Range(Cells(1, i), Cells(10, i))
Cells(11, i) = Application.WorksheetFunction.Sum(MyRng)
Next i
End Sub