VBAでワークシート関数のSUM関数の使い、複数の離れた範囲を指定して合計を算出する方法についてご説明します。
ワークシート関数の「SUM」を使用する事で、簡単に指定した範囲の合計を算出する事ができます。
Excelで非常に利用頻度の高い馴染みのある関数かと思います。
一つなぎのセル範囲を合計するのは簡単ですが、離れたセル範囲を合計する場合は「Unionメソッド」を使用するなど少し工夫が必要になります。
「Unionメソッド」を使わずに合計を算出する方法もありますので、どちらもサンプルコードを載せたいと思います。
基本的な使い方については「SUM関数の使い方と、範囲指定した合計を算出する方法」をご覧ください。
1.離れたセル範囲を合計する方法
SUM関数で離れたセル範囲を合計するには「Unionメソッド」を使用して、範囲を結合します。
次のように記述します。
SUM(Union(範囲1,範囲2))
VBAで利用するには次のように記述します。
Application.WorksheetFunction. SUM(Union(範囲1,範囲2))
Unionメソッドの注意点
Unionメソッドの注意点として、指定できるRangeの範囲が30個までということです。
30個を超えて結合することはそうそうないとは思いますが、30個以上Unionメソッドで結合する場合は超えないように工夫が必要です。
2.サンプルコード
離れたセル範囲を指定して、SUM関数で合計するサンプルコードです。
次のような複数の離れたデータを用意しましたので、それらを合計したいと思います。
Unionメソッドで合計するサンプルコード
上記データを使用してA11に各列の合計をSUM関数で合計します。
Sub Smaple1()
Dim MyRng As Range
Set MyRng = Union(Range(Cells(1, 1), Cells(10, 1)), _
Range(Cells(1, 3), Cells(10, 3)), _
Range(Cells(1, 5), Cells(10, 5)))
Cells(11, 1) = Application.WorksheetFunction.Sum(MyRng)
End Sub
コードの説明
『Set MyRng = Union(Range(Cells(1, 1), Cells(10, 1)), Range(Cells(1, 3), Cells(10, 3)),Range(Cells(1, 5), Cells(10, 5)))』は「Unionメソッド」で各列の範囲を結合しています。
長いため「_」で改行しています。
『Cells(11, 1) = Application.WorksheetFunction.Sum(MyRng)』でUnionで結合した複数の範囲を格納した変数をSUM関数で指定して「A11」に出力しています。
Unionを使わないで結合するサンプルコード
今回のケースは各列が1列置きに範囲がありますので、ループで「Step 2」でそれぞれ選択して変数へ格納して加算していく方法です。
ループの使い方については「「For~Next」「For Each In Next」「Do~Loop」 ループの使い方」をご覧ください。
Sub Smaple2()
Dim MyRng As Range
Dim MySum As Long
Dim i As Long
For i = 1 To 5 Step 2
Set MyRng = Range(Cells(1, i), Cells(10, i))
MySum = MySum + Application.WorksheetFunction.Sum(MyRng)
Next i
Cells(11, 1) = MySum
End Sub
コードの説明
「For i = 1 To 5 Step 2」で1列目から5列目までをカウントアップを2でループします。
「Set MyRng = Range(Cells(1, i), Cells(10, i))」で各列を変数「i」で変更しながら変数に範囲を格納していきます。
「MySum = MySum + Application.WorksheetFunction.Sum(MyRng)」で格納した範囲をそれぞれSUM関数で合計しますが、ポイントは「MySum +」の部分です。
「MySum +」がないと毎回列の合計が更新されてしまいますので、前回のループで算出した結果に対して加算します。
上記コードで注意として「MySum」という変数がLong型になっており、整数しか扱えませんので、小数点を含めた計算の場合は「Single」や「Double」で指定してください。