トップ > Excelマクロ > 2-1 合計を計算する(SUM関数)
こんにちは!
第2章では、「習うより慣れろ」の考えのもと、実際にプログラムを作りながらマクロの書き方を学びます!
作るプログラムの題材として、ゴールがイメージしやすいようにExcelの関数を取り上げました!
どんどんコーディングして、プログラミングに慣れていきましょう!
【今回できるようになること】
・変数の定義
・セルの選択
・値の代入
・繰り返し処理を使ったスマートなコーディング
それでは始めていきましょう!
突然ですが質問です。下のように、生徒5人の国語の点数の合計値を、セルE2に入れたい場合、あなたならどうしますか?
Excelを使っている人なら、SUM関数を使って一発ですね。
それでは、次のような場合はどうしますか?
生徒500人分の国語と数学の点数が交互に並んでいて、数学の点数だけを合計してセルE2に入れたい場合です。
大量のデータを交互に選択していく必要があるので、SUM関数を使ったとしても正直やりたくないですね...(^^;)
こんなときに、マクロが大活躍します。
500人分のデータを用意するのは大変なので、今回の例は5人分でやってみます。
しかし、今回作るマクロを使えば、同じコードで5人でも500人でも50000人でも計算できます!
それでは、VBEを開いて標準モジュールを追加し、メモ帳みたいなものの「Option Explicit」以下に、下のコードを書いてみましょう!
※コピペ用↓
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」を実行すると、数学のみの合計値が出るはずです。
ちなみにソースコードの「'」より右は、その行の説明が書いてあります。
今回は、目的のセルを順番に選択しながら加算していくことで、合計値を求めています。
ここまでできたら、よりスマートなコーディングを目指しましょう。
上のソースコードを見て、面倒だと感じることはありませんでしたか?
そうです。「セルを選択して加算する」という作業が、5回も繰り返し書かれていますね。
これでは、500人の生徒がいる場合、500回同じコードを書かなければいけなくなります。
これでは本末転倒ですね笑
「同じことを繰り返し書くなんて面倒だぁあああ」
という考え方は、プログラミングをするうえで大切になってくるので、今後も持ち続けてください。
プログラムを以下のように変更しましょう。
※コピペ用↓
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」に変えるだけで対応可能になりました。
今回はこれで終了です!
各コードの詳細は、第3章で解説する予定です。
今は「'」より右の説明を見て、「このコードはこういう意味があるのか~」くらいに読み進めていただければ問題ありません。
お疲れ様でした。また次回でお会いしましょう!
【今回のまとめ】
・「Dim 変数名 As Integer」で、整数値を入れる変数を定義できる
・「Range("列行").Select」で任意のセルを選択できる
・「代入先 = 代入するもの」で、代入先に代入するものを代入できる
・「For 変数 = 1 To a」と「Next 変数」の間に挟んだコードは、a回繰り返される
・「同じことを繰り返し書くなんて面倒だぁあああ」という考えは大切