VBAには処理を繰り返し処理に使える記法が3つある。
for ループ
標準的なループには For を使う変数 i が 1 から 10 変化しつつ繰り返す処理は次のように記述する。 [^1]
For i = 1 To 10
'処理
Next i
数値を飛ばしながら繰り返し処理をするなら Step を記述する。
For i = 1 To 10 Step 2
'処理
Next i
逆の場合は次の様になる。
For i = 10 To 1 Step -1
'処理
Next i
もちろん始まりの数、終わりの数は整数リテラルでなくてもよい。
For i = 式1 To 式2
'処理
Next i
For i = 式1 To 式2 Step 式3
'処理
Next i
歴史的な慣例により変数名に i j k などが利用される、もちろん処理の理解を助ける任意の名前でもよい。 If と同じように For もネストして書いてよいが変数を分ける必要がある、対になる Next に変数名を記述する。 ちぐはぐにしてはいけない。
'処理
For i = 1 To 10
'処理
For j = 1 To 10
'処理
Next j
'処理
Next i
do ループ
do ループには do while と do until がある。 do until は do while と条件が逆になってだけである、成立したら処理を行うという一貫性を維持するなら do until は利用しない方が良いだろう。
式が真の場合に繰り返し処理がしたい場合は次のように記述する。
Do While 式
'処理
Loop
上記では先に式が評価される為、時によっては一度処理される方が都合がよい場合があるがその時は次のように記述する。
Do
'処理
Loop While 式
For Each ループ
VBA には連続した値を返す機構がありその機能によるループが行える。
Dim sheet As Worksheet
For Each sheet In Worksheets
'処理
Next sheet
ループの脱出
何かしらの条件が成立したらループを終えたい場合には脱出用の記述を行う。 VBA ではループの種類で記述方法が変わる。
For から抜ける場合は Exit For を使う。
For i = 1 To 10
If 式 Then
Exit For
End If
Next i
Do から抜ける場合は Exit Do を使う。
Do While 式
If 式 Then
Exit Do
End If
Loop
ネストしたループから一気に脱出場合は GoTo を使う。
'処理
For i = 1 To 10
'処理
For j = 1 To 10
If 式 Then
Goto ラベル
End If
Next j
'処理
Next i
ラベル:
GoTo はあらゆる所へ処理の移動をすることが出来る為、このようなループ脱出やエラー処理時のみ利用すべきである。