エクセルの関数には合計・総和を求めるSUM・SUMIF・SUMIFS関数が存在します。
この関数は、なんとマクロVBAでも使用することができます。
使用方法は関数と同じです。
関数は下記リンクを参照してください。
【SUM関数】エクセルで合計(総和)を関数を使用して求める方法 ► 独学エクセル塾 (dokugakuexcel.com)
【SUMIF関数】エクセルで条件に当てはまる合計・総和を求める ► 独学エクセル塾 (dokugakuexcel.com)
【SUMIFS関数】エクセルで複数の条件に当てはまる合計を求める ► 独学エクセル塾 (dokugakuexcel.com)
合計はよく使用する機能ですよね。
ぜひ身に着けて活用してみてください。
それでは見ていきましょう。
■SUM関数で指定範囲の合計を求める
・プログラムの仕組み
Application.WorksheetFunction.Sum(合計を求めたい範囲)
・使用方法
では下図の例をもとに進めていきましょう
AさんからKさんまでの得点をC列に入力しており
今回はその合計得点を「E3」に入力してみましょう。
ではプログラムを組んでみましょう。
合計を求めたい範囲は「C3からC13」ですので下記のようになります。
Sub 合計()
Cells(3, 5) = Application.WorksheetFunction.Sum(Range(“C3:C13”))
End Sub
それでは実行した結果を見てみましょう。
合計を求めることができました。
ちなみにCellsで表示するとこのようになります。
Cells(3, 5) = Application.WorksheetFunction.Sum(Range(Cells(3, 3), Cells(13, 3)))
さらにRange変数を使用しても合計を求めることは可能です。
Sub 合計()
Dim A As Range
Set A = Range(“C3:C13”)
Cells(3, 5) = Application.WorksheetFunction.Sum(A)
End Sub
■SUMIF関数で条件に当てはまる合計を求める
・プログラムの仕組み
Application.WorksheetFunction.SumIf(条件の範囲,絞り込む条件,合計の範囲)
・使用方法
では下図の例をもとに進めていきましょう
先ほどのシートに学年が加わりました。
今回は2年の合計を求めてみましょう。
条件の範囲は「C3からC13」になります。
絞り込む条件は「2年」ですね。
合計の範囲は得点なので「D3からD13」ですね。
プログラムを組むとこのようになります。
Sub 条件に当てはまる合計()
Cells(3, 6) = Application.WorksheetFunction.SumIf(Range(“C3:C13”), “2年”, Range(“D3:D13”))
End Sub
それでは実行してみましょう。
機能していますね。
こちらもCellsで表してみましょう。
Cells(3, 6) = Application.WorksheetFunction.SumIf(Range(Cells(3, 3), Cells(13, 3)), “2年”, Range(Cells(3, 4), Cells(13, 4)))
Range変数を使用するとこのようになります。
Sub 条件に当てはまる合計()
Dim A As Range, B As Range
Set A = Range(“C3:C13”)
Set B = Range(“D3:D13”)Cells(3, 6) = Application.WorksheetFunction.SumIf(A, “2年”, B)
End Sub
■SUMIFS関数で条件に当てはまる合計を求める
・プログラムの仕組み
Application.WorksheetFunction.SumIfs(合計したい範囲,絞り込む範囲1,絞り込む条件1,絞り込む範囲2,絞り込む条件2….)
・使用方法
では下図の例をもとに進めていきましょう
今回はさらに「組」も追加しました。
では実際にプログラムを組んでみましょう。
合計したい範囲は「E3からE13」です。
絞り込む条件の範囲は1つ目は学年なので「C3からC12」です。
絞り込む条件の1つ目は「2年」ですね。
絞り込む条件の範囲は2つ目は学年なので「D3からD12」です。
絞り込む条件の2つ目は「は組」ですね。
それでは作成したプログラムを見てみましょう。
Sub 複数の条件に当てはまる合計()
Cells(10, 7) = Application.WorksheetFunction.SumIfs(Range(“E3:E13”), Range(“C3:C13”), “2年”, Range(“D3:D13”), “は組”)
End Sub
実行するとこのようになります。
「2年は組」に当てはまる「45」と「60」が合計されていますね。
ではCellsでもプログラムを見てみましょう。
Cells(10, 7) = Application.WorksheetFunction.SumIfs(Range(Cells(3, 5), Cells(13, 5)), Range(Cells(3, 3), Cells(13, 3)), “2年”, Range(Cells(3, 4), Cells(13, 4)), “は組”)
長くなりますが、変数を使う場合はこちらを活用してみましょう。
Range変数を使用するとこのようになります。
Sub 複数の条件に当てはまる合計()
Dim A As Range, B As Range, C As Range
Set A = Range(“C3:C13”)
Set B = Range(“D3:D13”)
Set C = Range(“E3:E13”)Cells(10, 7) = Application.WorksheetFunction.SumIfs(C, A, “2年”, B, “は組”)
End Sub
■よくあるエラーと対処法
・WorksheetFunctionクラスのSumifsプロパティを取得できません
こちらは合計の範囲にエラーが生じているかもしれません。
下図の見本を見てみましょう。
得点にエラーが存在しています。
先ほどの「2年は組」の条件で合計を求めるとエラーになってます。
こちらの解決方法は合計範囲のエラーをなくすしかありません。
IFERROR関数などを使用してエラーにならない出力を検討してみましょう。
・合計の結果が正しくない
こちらはセルの参照が間違っていないかを確認してください。
それでも結果が異なる場合は、表示形式が「文字列」になっている可能性があります。
下図を見てみましょう。
合計範囲が「文字列」で入力されている場合は数値としてみなされず
文字として判断されるため、合計されなくなります。
解決方法は表示形式を「標準」「数値」に戻して入力しなおすと解決します。
■練習問題
練習問題も別の記事でまとめているので是非参考にしてみてください!
⬛︎公式の説明
わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟
WorksheetFunction オブジェクト (Excel) | Microsoft Learn
■まとめ
いかがだったでしょうか。
関数では、よく使用されるSUM関数もVBAで使用できるのは便利ですね。
ぜひ使用してみてください。
次回は平均を求める方法についてまとめています。記事はこちらから☟
【マクロVBA知識 19】平均をAVERAGE/AVERAGEIF/AVERAGEIFSで求める ► 独学エクセル塾 (dokugakuexcel.com)
それでは次回の記事でお会いしましょう。