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

vbasumeyecatch

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

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

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

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

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

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

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

vbasump006

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

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

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

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

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

の3つがあります。

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

今回の例題の設定

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

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

表の特徴として、

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

SUM関数を使わない方法

最初は、エクセルVBAの力わざの発揮です。

SUM関数を利用せずに合計を出していきます。

力わざで合計計算

値を一つづつ合計していきます。

VBA
Option Explicit

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

参考記事

  • 入力セルの最終行を取得するにはこの記事が参考になります。
vbalastcelleyecatch データ入力済セルの最終行番号を取得する

SUM関数を使うが、計算はワークシートで行う方法

SUM関数を使いますが、言うなら球種としてはチェンジアップです。

関数式を挿入する

ワークシートで作成するSUM関数の関数式を、文字列として合計金額表示セルに挿入します。

VBA
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.」を付けて関数を使うことを表示しないといけません。

VBA
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」としています。

本来的には、行削除の度にループ回数を減少させるべきですが、コード組み立てが難しくなります。

(別に初期値のままでも、削除処理完了後はカラでループが回るだけですが・・・)

ですので、削除の度に新しい行数をチェックして、「上からと下から」が数的に合致したときにループを抜け出すようにしています。

VBA
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関数で合計計算!実務で使えるコード作成 まとめ

vbasump007

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

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

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

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

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

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

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

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

エクセルVBA業務ツールで日常の業務改善を行いましょう。

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

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min