Excel
VBA

VBA のループ

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 はあらゆる所へ処理の移動をすることが出来る為、このようなループ脱出やエラー処理時のみ利用すべきである。