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プロパティをつかっていません。
ワークシート関数も色々ありますので、使ってみると、処理時間が改善されるかもしれませんので、色々試してみるといいかもしれませんね。