SUM関数で合計計算!実務で使えるVBAコード作成

vbasumeyecatch

エクセルVBAで数値の合計を出すのに、ワークシート関数のSUMを使うことが出来ます。

もちろん使わない方法もありますが・・・。

また、その表の見せ方として合計範囲を明示的に示せるようにすることも大切です。

エクセルVBAで、羅列された数値の集計作業をパパッと熟していきたいときがありますよね。

それを簡単に行える方法としてSUM関数があります。今回はこのSUM関数の使い方についてです。

こんにちは、じゅんぱ店長(@junpa33)です。

「関数リファレンス」を調べる

SUM関数で合計計算!実務で使えるコード作成

皆さんお馴染みのSUM関数です。

恐らく、Excelを触り始めて一番最初に使えるようになる関数ではないでしょうか。

説明するまでもなく、セル範囲を指定してその範囲内での数値を合計表示するというものです。

VBAでも同じ理屈で動きます。

エクセルVBAで、「あるセル範囲内での合計計算表示」をするためには、

の3つがあります。

説明の進め方はこのようにしていきたいと思います。

今回の例題の設定

今回はこのような一覧表を設定します。

雑誌の本体価格合計と税込価格合計を計算します。

表の特徴として、

  • 上部に何行かの空白行がある。
  • 行間に空白行がある。
  • 空白行を含めてデータNOが通番になっている。
  • 個別データは固有コードで管理できている。
vbasum001

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

実行結果

赤丸囲みの部分に合計が表示されました。

vbasum002

MEMO

入力セルの最終行を取得するにはこの記事が参考になります。

vbalastcelleyecatch データ入力済セルの最終行番号を取得する

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関数式が挿入され、計算結果が表示されました。

vbasum003

SUM関数をVBAコードに埋め込んで計算する方法

エクセルVBAで使うSUM関数の本筋です。

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

実行結果

正常に合計金額が表示されました。

vbasum004

やっぱりデータ一覧表の整理整頓を行いたい

お気づきだと思いますが、

エクセル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

実行結果

この様に整理されました。

vbasum005

SUM関数で合計計算!実務で使えるコード作成 まとめ

エクセルVBAで数値の合計を計算したいときは、SUM関数を使うことがテッパンです。

ここでは3つの合計算出法を紹介しましたが、やはり「WorksheetFunction.」の方法が良いと思います。

そして他にも、表の見え方として

合計した範囲を分かりやすく表示できるように工夫していきましょう。

この部分は、それぞれいろんなパターンがありますので、工夫のしどころではないかと思います。

短期間でエクセルVBAの独学習得を目指したいなら

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

Excelマクロ&VBA超入門 今すぐ使えるかんたんぜったいデキます!
エクセルVBAを初めて勉強するときに効く
vbastudy016a
vbastudy017a

電子書籍版「Excelマクロ&VBA超入門」をamazonで見てみる

(著者)井上香緒里
(出版社)技術評論社
(税込価格)1,738円(本体1,580円+税)

マクロとVBAについて学んでみたいけれど,いまひとつ自信がないという方のために,ひとつひとつの操作を丁寧に解説する1冊目の教科書です。
エクセルVBAの「い・ろ・は の い」から説明していますので、安心して取り組める参考書です。
例題として、
  • 「データ消去」「シートのコピー」「メッセージボックス」の機能を持つお小遣い帳
  • 「入力フォーム」の機能を持った歩数表
2つの題材ファイルを作成しながら,マクロとVBAの基本を学習していきます。

このサイトでよく使うVBAのコードのトピックを纏めています。

エクセルVBA最速理解で必要な知識を集めよう!

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。