エクセルVBAで数値の合計を出すのに、ワークシート関数のSUMを使うことが出来ます。
もちろん使わない方法もありますが・・・。
また、その表の見せ方として合計範囲を明示的に示せるようにすることも大切です。
エクセルVBAで、羅列された数値の集計作業をパパッと熟していきたいときがありますよね。
それを簡単に行える方法としてSUM関数があります。今回はこのSUM関数の使い方についてです。
こんにちは、じゅんぱ店長(@junpa33)です。
コンテンツ
SUM関数で合計計算!実務で使えるコード作成
皆さんお馴染みのSUM関数です。
恐らく、Excelを触り始めて一番最初に使えるようになる関数ではないでしょうか。
説明するまでもなく、セル範囲を指定してその範囲内での数値を合計表示するというものです。
VBAでも同じ理屈で動きます。
エクセルVBAで、「あるセル範囲内での合計計算表示」をするためには、
の3つがあります。
説明の進め方はこのようにしていきたいと思います。
- 今回の例題の設定
- SUM関数を使わない方法
- SUM関数を使うには使うが、計算はワークシートで行ってもらう方法
- SUM関数をVBAコードに埋め込んで計算する方法
- やっぱりデータ一覧表の整理整頓を行いたい
今回の例題の設定
今回はこのような一覧表を設定します。
雑誌の本体価格合計と税込価格合計を計算します。
表の特徴として、
- 上部に何行かの空白行がある。
- 行間に空白行がある。
- 空白行を含めてデータNOが通番になっている。
- 個別データは固有コードで管理できている。

SUM関数を使わない方法
最初は、エクセルVBAの力わざの発揮です。
SUM関数を利用せずに合計を出していきます。
値を一つづつ合計していきます。
Sub 合計計算法1() Dim i As Long Dim ArowD As Long, ArowU As Long Dim Va As Long, aVa As Long, Vb As Long, aVb As Long 'A列で上から数えてデータの始まり行を調べる ArowD = Cells(1, 1).End(xlDown).Row 'A列で下から数えてデータの終わりの行を調べる ArowU = Cells(Rows.Count, 1).End(xlUp).Row '積算合計の変数を初期化する aVa = 0 aVb = 0 For i = ArowD To ArowU Va = Cells(i, 10) Vb = Cells(i, 11) aVa = aVa + Va aVb = aVb + Vb Next i '積算合計を表の最終行の下に表示する Cells(ArowU + 1, 10) = aVa Cells(ArowU + 1, 11) = aVb End Sub
実行結果
赤丸囲みの部分に合計が表示されました。
SUM関数を使うには使うが、計算はワークシートで行ってもらう方法
SUM関数を使いますが、球種としてはチェンジアップです。
ワークシートで作成するSUM関数の関数式を、文字列として合計金額表示セルに挿入します。
Sub 合計計算法2() Dim ArowD As Long, ArowU As Long 'A列で上から数えてデータの始まり行を調べる ArowD = Cells(1, 1).End(xlDown).Row 'A列で下から数えてデータの終わりの行を調べる ArowU = Cells(Rows.Count, 1).End(xlUp).Row '積算合計の関数式を表の最終行の下に挿入する Cells(ArowU + 1, 10) = "=SUM(J" & ArowD & ": J" & ArowU & ")" Cells(ArowU + 1, 11) = "=SUM(K" & ArowD & ": K" & ArowU & ")" End Sub
実行結果
合計金額欄にSUM関数式が挿入され、計算結果が表示されました。
SUM関数をVBAコードに埋め込んで計算する方法
エクセルVBAで使うSUM関数の本筋です。
SUM関数の構文はVBAでも変わりません。
ただし「WorksheetFunction.」を付けて関数を使うことを表示しないといけません。
Sub 合計計算法3() Dim ArowD As Long, ArowU As Long 'A列で上から数えてデータの始まり行を調べる ArowD = Cells(1, 1).End(xlDown).Row 'A列で下から数えてデータの終わりの行を調べる ArowU = Cells(Rows.Count, 1).End(xlUp).Row '積算合計の表示セルに計算結果を表示する Cells(ArowU + 1, 10) = WorksheetFunction.Sum(Range(Cells(ArowD, 10), _ Cells(ArowU, 10))) Cells(ArowU + 1, 11) = WorksheetFunction.Sum(Range(Cells(ArowD, 11), _ Cells(ArowU, 11))) End Sub
実行結果
正常に合計金額が表示されました。
やっぱりデータ一覧表の整理整頓を行いたい
お気づきだと思いますが、
エクセルVBAでSUM関数を使った場合、合計計算範囲が「どこからどこまでか」が解らない、という事態が起こります。
ワークシートでSUM関数式を使うと、合計範囲を表示してくれますが、エクセルVBAではそれが無いのです。
この例で言っても、どこまでの合計なのかイマイチ分からないと思います。
ということで、
合計範囲をより「明示的」に示せるように空白行を出来るなら削除しておいた方が良いと思います。
行の削除ということで、最終行のカウントは、その都度変化していきます。
For~Next文で、最後の回数を初期値の「ArowU」としています。
本来的には、行削除の度にループ回数を減少させるべきですが、コード組み立てが難しくなります。
(別に初期値のままでも、削除処理完了後はカラでループが回るだけですが・・・)
ですので、削除の度に新しい行数をチェックして、「上からと下から」が数的に合致したときにループを抜け出すようにしています。
Sub 合計計算法4() Dim i As Long Dim ArowD As Long, ArowU As Long Dim ArowDa As Long, ArowUa As Long 'A列で上から数えてデータの始まり行を調べる(初期値) ArowD = Cells(1, 1).End(xlDown).Row 'A列で下から数えてデータの終わりの行を調べる(初期値) ArowU = Cells(Rows.Count, 1).End(xlUp).Row 'J列で連続してデータ入力されている行数を調べる(初期値) ArowDa = Cells(ArowD, 10).End(xlDown).Row '初期値の代入 ArowUa = ArowU For i = ArowD To ArowU If ArowDa <> ArowUa Then Rows(ArowDa + 1).Delete '空白行の削除が終われば「上から」と「下から」が同数になる ElseIf ArowDa = ArowUa Then 'この条件を満たす時 For Nextを抜ける Exit For End If '行の削除後に行数が変化。行数を再度調べる ArowDa = Cells(ArowD, 10).End(xlDown).Row '行の削除後に行数が変化。行数を再度調べる ArowUa = Cells(Rows.Count, 1).End(xlUp).Row Next i '積算合計の表示セルに計算結果を表示する Cells(ArowUa + 1, 10) = WorksheetFunction.Sum(Range(Cells(ArowD, 10), _ Cells(ArowUa, 10))) Cells(ArowUa + 1, 11) = WorksheetFunction.Sum(Range(Cells(ArowD, 11), _ Cells(ArowUa, 11))) End Sub
実行結果
この様に整理されました。
SUM関数で合計計算!実務で使えるコード作成 まとめ
エクセルVBAで数値の合計を計算したいときは、SUM関数を使うことがテッパンです。
ここでは3つの合計算出法を紹介しましたが、やはり「WorksheetFunction.」の方法が良いと思います。
そして他にも、表の見え方として
合計した範囲を分かりやすく表示できるように工夫していきましょう。
この部分は、それぞれいろんなパターンがありますので、工夫のしどころではないかと思います。
短期間でエクセルVBAの独学習得を目指したいなら
エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。
けれども、
出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。
独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。
先人が行った勉強方法をあなたがそのまま利用すればよいということです。
独習のための大切な7つのポイントは、上記記事にて解説しています。
独習によるVBA習得のキーワードは、
出来るだけ多くの実例に触れること!
です。
正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。
ハッキリ言って、
本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、
手っ取り早く短期間習得できるというのは間違いないでしょう。


電子書籍版「Excelマクロ&VBA超入門」をamazonで見てみる
(著者)井上香緒里(出版社)技術評論社
(税込価格)1,738円(本体1,580円+税)
マクロとVBAについて学んでみたいけれど,いまひとつ自信がないという方のために,ひとつひとつの操作を丁寧に解説する1冊目の教科書です。
エクセルVBAの「い・ろ・は の い」から説明していますので、安心して取り組める参考書です。
例題として、
- 「データ消去」「シートのコピー」「メッセージボックス」の機能を持つお小遣い帳
- 「入力フォーム」の機能を持った歩数表
このサイトでよく使うVBAのコードのトピックを纏めています。
今回の記事はここまでです。 最後までご覧いただき有難うございました。