初めに
本記事では、For文を使用した繰り返し処理を解説します。
For文とは
For文は、指定した回数だけ処理を繰り返したい場合に使用します。
For文の構文
「Next 変数名」の変数名の部分は省略可能です。
また、「Step 加算値」も省略が出来ます。
「Step 加算値」の詳細に関しては、下記で解説します。
For文を使用したプログラム
指定した回数を繰り返す
5回ループさせて、メッセージダイアログに処理回数を表示します。
1 2 3 4 5 6 7 | Sub Loop5() Dim i As Integer For i = 1 To 5 MsgBox i & "回" Next i End Sub |
Stepで加算数を指定
iの値が、1回ループするたびに1加算されていました。
それを2ずつ加算するようにします。
1 2 3 4 5 6 7 | Sub Loop5のカウントを2ずつ加算() Dim i As Integer For i = 1 To 5 Step 2 MsgBox i & "回" Next i End Sub |
上記では、1からカウントが加算されています。
次は、カウントダウンのように、5から減算させていきます。
1 2 3 4 5 6 7 8 | Sub Loop5を5回目から減算() Dim i As Integer For i = 5 To 1 Step -1 MsgBox i & "回" Next i End Sub |
For文を使用した応用プログラム
ここからは、応用編です。
「Loop5」を改良して行きます。
指定した回数の処理を飛ばす
以下のプログラムは、3回目の処理を飛ばします。
1 2 3 4 5 6 7 8 9 10 11 12 13 | Sub Loop5の3回目の処理を飛ばす() Dim i As Integer For i = 1 To 5 If i = 3 Then GoTo 飛ばす End If MsgBox i & "回" 飛ばす: Next i End Sub |
修正後は、IF文でiのカウントが3回目か判断して、3回目の場合にGoTo文で「飛ばす:」のところまで処理を移動させています。
そのため、「飛ばす:」の上にある「MsgBox i & "回"」が実行されません。
修正前
1 2 3 | For i = 1 To 5 MsgBox i & "回" Next i |
修正後
1 2 3 4 5 6 7 8 | For i = 1 To 5 If i = 3 Then GoTo 飛ばす End If MsgBox i & "回" 飛ばす: Next i |
For文を途中で抜ける
以下のプログラムは、3回目でFor文を抜けます。
For文を抜けたい場合は、「Exit For」を使用することで実現できます。
1 2 3 4 5 6 7 8 9 10 11 | Sub Loop5の3回目の処理でFor文を抜ける() Dim i As Integer For i = 1 To 5 If i = 3 Then Exit For End If MsgBox i & "回" Next i End Sub |
修正前
1 2 3 | For i = 1 To 5 MsgBox i & "回" Next i |
修正後
1 2 3 4 5 6 7 | For i = 1 To 5 If i = 3 Then Exit For End If MsgBox i & "回" Next i |
2重ループ
以下のプログラムは、「Loop5」の処理を3回ループします。
1 2 3 4 5 6 7 8 9 10 | Sub Loop5を3回ループ() Dim i As Integer Dim j As Integer For i = 1 To 3 For j = 1 To 5 MsgBox "Loop5の処理" & i & "回目" & " " & j & "回" Next j Next i End Sub |
修正前
1 2 3 | For i = 1 To 5 MsgBox i & "回" Next i |
修正後
1 2 3 4 5 | For i = 1 To 3 For j = 1 To 5 MsgBox "Loop5の処理" & i & "回目" & " " & j & "回" Next j Next i |
最初の「For文の構文」の解説のところで、「Next」の後ろについている変数名を省略することが出来るとお話ししたと思います。
ただ、変数名を省略することはお勧めしません。
上記で作成したFor文を多用した場合で考えてみましょう。
For i = 1
For j = 1
For k = 1
Next
処理A
処理B
処理C
Next
処理D
処理E
処理F
Next
上記のように、NextとNextの間に処理が書かれているような場合に、今見ている処理が、どのFor文の処理なのか判断しにくくなります。
しかし、以下のように変数名が書いてあるとどうでしょうか?
For i = 1
For j = 1
For k = 1
Next k
処理A
処理B
処理C
Next j
処理D
処理E
処理F
Next i
たとえば、処理Cが、どのFor文で処理をしているか判断しようと思ったときにNextの後ろの変数を見れば「j」のカウントのFor文内であることがすぐに判断できます。
このように、変数名を省略することは可能ですが、付けておくことをお勧めします。
まとめ
VBAのFor文について解説しました。
他にもVBAについて解説していますので、参考にしてみてください。