Junchi Lab

トップ > Excelマクロ > 2-1 合計を計算する(SUM関数)

2-1 合計を計算する(SUM関数)


こんにちは!
第2章では、「習うより慣れろ」の考えのもと、実際にプログラムを作りながらマクロの書き方を学びます!
作るプログラムの題材として、ゴールがイメージしやすいようにExcelの関数を取り上げました!
どんどんコーディングして、プログラミングに慣れていきましょう!


【今回できるようになること】

・変数の定義
・セルの選択
・値の代入
・繰り返し処理を使ったスマートなコーディング


vba1_1_1


それでは始めていきましょう!
突然ですが質問です。下のように、生徒5人の国語の点数の合計値を、セルE2に入れたい場合、あなたならどうしますか?


vba2_1_1


Excelを使っている人なら、SUM関数を使って一発ですね。


vba2_1_2


それでは、次のような場合はどうしますか?
生徒500人分の国語と数学の点数が交互に並んでいて、数学の点数だけを合計してセルE2に入れたい場合です。
大量のデータを交互に選択していく必要があるので、SUM関数を使ったとしても正直やりたくないですね...(^^;)
こんなときに、マクロが大活躍します。


vba2_1_3


500人分のデータを用意するのは大変なので、今回の例は5人分でやってみます。
しかし、今回作るマクロを使えば、同じコードで5人でも500人でも50000人でも計算できます!


vba2_1_4


それでは、VBEを開いて標準モジュールを追加し、メモ帳みたいなものの「Option Explicit」以下に、下のコードを書いてみましょう!

1-4 マクロを動かす 参照

vba2_1_8


※コピペ用↓

Sub Goukei2()

 Dim sum As Integer '合計値を代入していく変数「sum」を定義
 sum = 0 'sumに0を代入

 Range("C3").Select 'セルC3を選択
 sum = sum + Selection.Value '「sum」に選択したセルの値を加算

 Range("C5").Select
 sum = sum + Selection.Value

 Range("C7").Select
 sum = sum + Selection.Value

 Range("C9").Select
 sum = sum + Selection.Value

 Range("C11").Select
 sum = sum + Selection.Value

 Range("E2").Value = sum 'セルE2にsumを代入

End Sub


第1章同様、実行ボタンを作ってマクロ「Goukei2」を実行すると、数学のみの合計値が出るはずです。

1-4 マクロを動かす 参照


ちなみにソースコードの「'」より右は、その行の説明が書いてあります。
今回は、目的のセルを順番に選択しながら加算していくことで、合計値を求めています。


vba2_1_5


ここまでできたら、よりスマートなコーディングを目指しましょう。
上のソースコードを見て、面倒だと感じることはありませんでしたか?

そうです。「セルを選択して加算する」という作業が、5回も繰り返し書かれていますね。
これでは、500人の生徒がいる場合、500回同じコードを書かなければいけなくなります。
これでは本末転倒ですね笑


vba2_1_6


「同じことを繰り返し書くなんて面倒だぁあああ」
という考え方は、プログラミングをするうえで大切になってくるので、今後も持ち続けてください。

プログラムを以下のように変更しましょう。


vba2_1_9


※コピペ用↓

Sub Goukei2()

 Dim sum As Integer
 sum = 0

 Range("C3").Select

'-----↓変更点↓-----

 Dim i As Integer '繰り返し回数をカウントしていく変数「i」を定義

 For i = 1 To 5 '1から5まで(つまり5回)繰り返す
  sum = sum + Selection.Value '「sum」に選択したセルの値を加算
  Selection.Offset(2, 0).Select '選択しているセルを2行下にずらす
 Next i

'-----↑変更点↑-----

 Range("E2").Value = sum

End Sub


修正版では、「For i = 1 To 5」で始まり「Next i」で終わる繰り返しの処理を取り入れました。
こうすることで、生徒が500人になった場合も、「1 To 5」の部分を「1 To 500」に変えるだけで対応可能になりました。


vba2_1_7


今回はこれで終了です!

各コードの詳細は、第3章で解説する予定です。
今は「'」より右の説明を見て、「このコードはこういう意味があるのか~」くらいに読み進めていただければ問題ありません。

お疲れ様でした。また次回でお会いしましょう!


【今回のまとめ】

・「Dim 変数名 As Integer」で、整数値を入れる変数を定義できる
・「Range("列行").Select」で任意のセルを選択できる
・「代入先 = 代入するもの」で、代入先に代入するものを代入できる
・「For 変数 = 1 To a」と「Next 変数」の間に挟んだコードは、a回繰り返される
・「同じことを繰り返し書くなんて面倒だぁあああ」という考えは大切


次回 2-2 平均を計算する(AVERAGE関数)