このページでは、Excel VBAで利用ができる繰り返し処理について紹介します。
繰り返す回数が決まっている時に利用するのがFor文です。
For = To [Step ]
'処理
Next
<カウント変数>に対し、まず<初期値>をセットし、処理が終わるごとに<加算値>を加えながら、<終了値>になるまで処理を繰り返します。「Step <加算値>」は省略することができ、その場合は加算値として1が使用されます。
例えば、1から10までの数字を順にダイアログに表示させるには、次のように記述します。
Dim i As Integer
For i = 1 To 10 Step 1
MsgBox(i)
Next i
配列やコレクションに対して繰り返し処理を行う場合には、For Each文を使うのが便利です。
For Each In
'処理
Next
<配列やコレクション>に含まれる要素を一つ一つ<要素の変数>に格納しながら処理を繰り返します。
例えば、1から10までの数字を含む配列から順に数字を取り出し、ダイアログに表示させるには、次のように記述します。
Dim arr() As Variant
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
For Each ele in arr
MsgBox(ele)
Next ele
指定した条件が 真 の場合に処理を繰り返すにはDo While文を使用します。
Do While
'処理
Loop
例えば、Do While文を利用して上述のFor文の例と同じことを行うには、次のように記述します。
Dim i As Integer
i = 1
Do While i <= 10
MsgBox(i)
i = i + 1
Loop
また、条件判断を処理の後に行うこともできます。この場合、無条件で1度は処理が行われることになります。
Do
'処理
Loop While
指定した条件が 偽 の場合に処理を繰り返すにはDo Until文を使用します。
Do Until
'処理
Loop
また、Do Whileと同様に条件判断を処理の後に行うこともできます。
Do
'処理
Loop Until
特定の条件になった場合に繰り返し処理を抜けるにはExitステートメントを利用します。For文に対しては「Exit For」、Do文に対しては「Exit Do」を使用します。
例えば、For文において1から10までの繰り返す中で、カウンタ変数が5を超えた時点で繰り返しを抜けたい場合は、次のように記述します。
Dim i As Integer
For i = 1 To 10
If i > 5 Then
Exit For
End If
MsgBox(i)
Next i
多くのプログラミング言語においては、繰り返し処理の中で、後続の処理をスキップして繰り返しの先頭に戻るための構文(Continue)が用意されていますが、残念ながらVBAには存在しません。ただし、GoTo文を利用することで、疑似的にこのContinue構文を実現することができます。
例えば、For文において1から10まで繰り返す中で、カウンタ変数が5の時のみ処理をスキップしたい場合は、次のように記述します。
Dim i As Integer
For i = 1 To 10
If i = 5 Then
GoTo CONTINUE
End If
MsgBox(i)
CONTINUE:
Next i