Excel VBAで「合計」を計算する2通りの方法をわかりやすく解説
Excel VBAで合計を計算する方法には、大きく分けて2通りあります。
1つはFor文で繰り返し計算する方法、もう1つはExcel関数の中にあるSUM関数を使う方法です。
For文については
Excel VBA初心者向け|物流シミュレーションをするためにこれだけは知っておきたいこと
でも解説しましたが、まずはこちらから行きましょう。
For文の繰り返し計算で合計を求める方法
下図はある商品の1月1日から1月20日までの売上データです。
この合計と平均を計算して、計算結果をシートに書き込むExcel VBAを作成してみます。
まずは、For文を使って合計を計算してみましょう。
エクセルシートで合計を求める場合にはSUM関数を使えば簡単ですが、一般的なプログラミングではわざわざExcelシートに書き込むことはしないので、こちらのやり方が一般的です。
まずC1セルにB1セルと同じ値が来るように“=B1”と入力します。
次にC2セルに“=C1+B2”と入力します。
これによって、1月1日の売上と1月2日の売上が足されます。
続いてC2セルをC20セルまでコピペします。
すると、C列にはB列の累計値が計算され、C20セルはB1セルからB20までの合計値になります。
これをFor文を使ってExcel VBAで書くと次のようになります。
For文でIを1から20まで変化させますので、始めに
Dim I As Long
でIが整数であることを定義します。
次に累計値を入れる箱として、Goukeiという変数を定義します。
売上値は整数のため累計値も整数になりますので、
Dim Goukei As Long
と定義します。
この変数の名前は何にしてもよいので、後で自分がプログラムを見た時にわかり易い名前にしておきます。
次に累計値を入れる箱であるGoukei変数をゼロにリセットするために、、
Goukei=0
としておきます。
そしてこのGoukeiに売上データを上から順に加えていきます。
最初にGoukei (=0)に(1,2)セルの値を加えたものを、新たなGoukeiにします。
つまり、
となります。
次に新たなGoukei(=472)に(2,2)セルの値を加えたものが、新たなGoukeiになります。
これを最後の(20,2)セルまで繰り返すと、すべての売上の合計がGoukei変数に入ることになります。
それを一発で表す式が
For I = 1 To 20
Goukei = Goukei + Range(Cells(I, 2), Cells(I, 2))
Next I
となるのです。
最後に計算結果を同じシート上に表示するために、(1,4)セルに「Total:」を表示し、(1,5)セルにGoukei変数の値を表示させます。
Range(Cells(1, 4), Cells(1, 4)) = "Total :"
Range(Cells(1, 5), Cells(1, 5)) = Goukei
この時、
Range(Cells(1, 5), Cells(1, 5)) = “Goukei”
のように書くと、(1,5)セルにはGoukeiという文字が表示されるだけになってしまいますので注意して下さい。
Goukeiという変数に入っている値を表示させたい場合には、“ ”で囲まずに書きます。
さて、これで売上の合計を計算して表示するtest1というマクロ名のプログラムが完成しましたので、これを実行させてみましょう。
Developer >> Macrosをクリックします。
そして、出てくるポップアップ画面でtest1を選択してRunをクリックします。
すると下のように合計値が表示されました。
ここで一つ便利なExcel VBA関数を紹介しておきます。
この例ではデータが20行までにしか入っていないことが分かっていましたので、
For I=1 to 20
のように書くことができましたが、データ数が変わるとその度に20を書き換える必要があり面倒です。
この時、データが何行目まで入っているかを調べる関数があると非常に便利です。
Cells(Rows.Count, 1).End(xlUp)
の関数がそれで、1列目(A列)に入っているデータの最終行を返してくれます。
従って、新たな変数、例えばRowという変数を
Dim Row as Long
のように最初に定義して、
Row=Cells(Rows.Count, 1).End(xlUp)
のように書けば、上の例ではRowに20が入ります。
ですので、
For I=1 to 20
の代わりに
For I=1 to Row
と書くことができて、データ数が100になっても1,000になってもマクロプログラムを書き換える必要がなくなり便利です。
Excel VBA内でSUM関数を使って合計を計算する方法
さて、このようにして合計値をExcel VBAで求めることができますが、エクセル関数のSUMがExcel VBAでも使えるともっと便利ですよね。
実はそのためにExcel VBAではエクセル関数を使えるようになっています。
Application.WorksheetFunction.
に続いてエクセル関数を書くだけで、Excel VBAプログラムの中でエクセル関数を使えるようになります。
上の例では、(1,2)セルから(20,2)セルまで売上データが入っていますので、その合計を(2,5)セルに表示したい場合には、
Range(Cells(2, 5), Cells(2, 5)) = Application.WorksheetFunction.Sum(Range(Cells(1, 2), Cells(20, 2)))
と書けばOKです。
もし合計でなく平均値を求めたい場合には、
Range(Cells(2, 5), Cells(2, 5)) = Application.WorksheetFunction.Average(Range(Cells(1, 2), Cells(20, 2)))
と書けばOKです。
これは実に便利な機能ですので、覚えておくとよいでしょう。
先ほどのFor文を使って計算した合計と、エクセル関数を使って計算した合計の両方を表示されるプログラムを書くと下記のようになります。
そしてこれを実行すると次のようになります。
まとめ
いかがでしたでしょうか?
一般的なプログラミング言語ではFor文を使って繰り返し計算するのが普通ですが、Excel VBAはExcelシートに書き込みながらExcel関数を使えるという特徴があるため、SUM関数で簡単に合計を計算することができます。
Excel VBAならではの長所ですね。