ExcelでのVBAマクロを使えるようになると、人の手要らずでの計算やファイル作成が可能になります。
この記事では、VBAマクロでのfor文を紹介します。
for文とは
一定回数分繰り返し処理をさせることができるのが、for文です。
構文は下記のようになっています。
For 変数 = 初期値 To 終了値
処理
Next 変数
例として、以下のようなプログラムを実行してみましょう。
Dim i As Integer
For i = 1 To 10
Cells(i, 1) = 100
Next i
以下のような結果になりました。
セルのA1からA10までに100という数値が入力されています。
それでは、構文の意味をひとつずつ解説していきます。
まずは、最初の行です。
変数iを整数として定義しています。
Dim i As Integer
次のカタマリです。
変数iを1から10に変化させていきながら、中のセル入力処理を実行していることを意味しています。
For i = 1 To 10
Cells(i, 1) = 100
Next i
※繰り返し処理の流れを記載していきます。
変数iの最初の値は1。Cells(1,1)=100となり、A1のセルに100を入力。
変数iの次の値は2。Cells(2,1)=100となり、A2のセルに100を入力。
変数iの次の値は3。Cells(3,1)=100となり、A3のセルに100を入力。
変数iの次の値は4。Cells(4,1)=100となり、A4のセルに100を入力。
変数iの次の値は5。Cells(5,1)=100となり、A5のセルに100を入力。
変数iの次の値は6。Cells(6,1)=100となり、A6のセルに100を入力。
変数iの次の値は7。Cells(7,1)=100となり、A7のセルに100を入力。
変数iの次の値は8。Cells(8,1)=100となり、A8のセルに100を入力。
変数iの次の値は9。Cells(9,1)=100となり、A9のセルに100を入力。
変数iの最後の値は10。Cells(10,1)=100となり、A10のセルに100を入力。
for文で何個飛ばしして処理する方法
次にfor文で何個飛ばしで処理をさせる方法を紹介します。
先ほどは、+1で変数が増えていきましたが、2個飛ばし(+2)で変数を変えていきたい場合は、「Step 数値」を追加で指定してあげる必要があります。
構文は下記のようになります。
For 変数 = 初期値 To 終了値 Step 数値
処理
Next 変数
+2で変化させていく場合は「Step 2」と記載します。
-2で変化させていく場合は「Step -2」と記載します。
例として、以下のようなプログラムを実行してみましょう。
Dim i As Integer
For i = 1 To 10 Step 2
Cells(i, 1) = 100
Next i
以下のような結果になりました。
セルのA1、A3、A5、A7、A9に100という数値が入力されています。
※繰り返し処理の流れを記載していきます。
変数iの最初の値は1。Cells(1,1)=100となり、A1のセルに100を入力。
Step 2なので変数iの次の値は3。Cells(3,1)=100となり、A3のセルに100を入力。
Step 2なので変数iの次の値は5。Cells(5,1)=100となり、A5のセルに100を入力。
Step 2なので変数iの次の値は7。Cells(7,1)=100となり、A7のセルに100を入力。
Step 2なので変数iの次の値は9。Cells(9,1)=100となり、A9のセルに100を入力。
Step 2なので変数iの次の値は11。と言いたいところですが、変数は1から10の間の値をとるので、変数iが9の時点までの処理が実行されます。
for文の繰り返し処理を途中で抜ける
for文の繰り返し処理は、基本的に初期値から終了値まで行われます。
ただ、この処理をIf文を使って途中で抜けることができます。
構文例としては下記のようになります。
For 変数 = 初期値 To 終了値
処理
if 変数 = 数値 then
Exit For
End If
Next 変数
例として、以下のようなプログラムを実行してみましょう。
Dim i As Integer
For i = 1 To 10
Cells(i, 1) = 100
If i = 6 Then
Exit For
End If
Next i
以下のような結果になりました。
セルのA1からA6に100という数値が入力されています。
※繰り返し処理の流れを記載していきます。
変数iの最初の値は1。Cells(1,1)=100となり、A1のセルに100を入力。変数iは6でないので、If文の処理は実行されない。
変数iの次の値は2。Cells(2,1)=100となり、A2のセルに100を入力。変数iは6でないので、If文の処理は実行されない。
変数iの次の値は3。Cells(3,1)=100となり、A3のセルに100を入力。変数iは6でないので、If文の処理は実行されない。
変数iの次の値は4。Cells(4,1)=100となり、A4のセルに100を入力。変数iは6でないので、If文の処理は実行されない。
変数iの次の値は5。Cells(5,1)=100となり、A5のセルに100を入力。変数iは6でないので、If文の処理は実行されない。
変数iの次の値は6。Cells(6,1)=100となり、A6のセルに100を入力。変数iは6なので、If文の処理は実行され、Exit Forつまりfor文を抜けて全体の処理終了。
繰り返し処理の流れで、くどいようですがIfの確認を都度しているということです。
for文の実用例
for文はどのようなときに利用するかを紹介します。
ある企業の購入マスタから、購入金額の合計金額を求めたい場合を考えてみます。
例として、下記のようなマスタがあったとします。
購入額の合計を求めるプログラミングは下記の通りです。
※あくまでも一例です。
Dim i As Integer
Dim sum As Integer
sum = 0
For i = 2 To 100
If Cells(i, 1) = "" Then
Exit For
End If
sum = sum + Cells(i, 4)
Next i
MsgBox ("合計金額は" & sum & "円です")
2行目からカウントしていくので、for文の初期値2とします。
If文で1列目の日付が空欄になったらfor文を抜ける処理を入れています。
合計値として変数sumを用意して4列目にある購入額を足していきます。
以下のような結果になりました。
※念のため、手計算しても同じ結果となりました。
でも、for文での終了値を100としているから、データが100個以上あったらどうするの?for文内で計算できないのでは?
ご指摘の通り。終了値を100としているので、それを超えるデータには対応できないコードとなっています。ただ、この問題を解消できる方法はもちろんあるので、別途紹介します。
とりあえず今回は、こんな処理が可能だということが伝わっていれば良いです。
まとめ
VBAマクロでのfor文について、紹介しました。
for構文
For 変数 = 初期値 To 終了値
処理
Next 変数
Stepオプション
「Step 数値」で何個飛ばしでの処理を指定できます。
指定しない場合は、「+1」で変数が変化していきます。
for文を途中で抜ける
If文でExit Forで繰り返し処理を抜けることができます。
コメント