Excel

繰り返し処理


このページでは、Excel VBAで利用ができる繰り返し処理について紹介します。

For


繰り返す回数が決まっている時に利用するのが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文を使うのが便利です。

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文を使用します。

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文を使用します。

Do Until
  '処理
Loop

また、Do Whileと同様に条件判断を処理の後に行うこともできます。

Do
  '処理
Loop Until

Exit For / Do(繰り返しの途中で抜ける)


特定の条件になった場合に繰り返し処理を抜けるには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(繰り返しの先頭に戻る)


多くのプログラミング言語においては、繰り返し処理の中で、後続の処理をスキップして繰り返しの先頭に戻るための構文(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