10/27/2022

Excel。VBA。最終行の下にSUM関数で合計値を算出するには【last line】

Excel。VBA。最終行の下にSUM関数で合計値を算出するには

<Exce VBA:WorksheetFunction>

For文などの繰り返し処理になれてくると、自然と、プログラム文を作るときに、繰り返し処理を使いたくなってしまいます。


繰り返し処理は、意外と処理時間がかかる傾向にあります。


要するに、データの件数が増えてしまうと、処理時間がかかってしまい、Excel VBAで高速化できるはずだったのが、イマイチということも発生します。


例えば、データの最終行に合計値を算出したい場合などが、そのケースに当たります。


次の表を用意しました。


Excelだったらば、B7にSUM関数の数式を作るはずです。

Excel VBAになったからといって、繰り返し処理にする必要はないわけです。


次のようにExcel VBAでプログラム文をつくってみました。


Sub 最終行に合計()

    Range("a2").End(xlDown).Offset(1).Value = "合計"

    Range("b2").End(xlDown).Offset(1).Value = WorksheetFunction.Sum(Range("b2", Range("b2").End(xlDown)))

End Sub


実行して確認してみましょう。


このように、データの最終行の下に合計を算出することができました。


では、プログラム文を確認しておきます。

Range("a2").End(xlDown).Offset(1).Value = "合計"


A2を起点として、End(xlDown)がデータの最終行なので、その一つ下「.Offset(1)」に「合計」と入力します。


同じ仕組みで、

Range("b2").End(xlDown).Offset(1).Value = WorksheetFunction.Sum(Range("b2", Range("b2").End(xlDown)))


B2を起点としてデータの最終行の一つ下「Range("b2").End(xlDown).Offset(1).Value」に、「WorksheetFunction.Sum」で、ワークシート関数のSum関数を使います。


ワークシート関数のSum関数の引数も、普通のSUM関数と同じなので、始点から終点を設定していきます。


ただし、データ量が変わっても最終行の下に合計を算出したいので、範囲を調整できるようにしています。範囲を調整しているのが「Range("b2").End(xlDown)」の部分です。


なお、算出結果のみで数式は不要なので、B2には、Formulaプロパティをつかっていません。


ワークシート関数も色々ありますので、使ってみると、処理時間が改善されるかもしれませんので、色々試してみるといいかもしれませんね。