更新日:、 作成日:

VBA Do While, Do Loop でループする

はじめに

Excel VBA マクロの Do While, Do Until, Do Loop 文を使用してループする方法を紹介します。

Do While 条件 のようにして、条件が一致する間 (True) ループします。

Do Until 条件 のようにして、条件に一致するまで (False) ループします。

Do Loop のようにして、無限ループします。Exit Do でループを抜けるか、Exit Sub などで関数を抜けるまでループします。

Exit Do のようにして、Do ループを抜けます。

GoTo Continue のようにして、ループをスキップできます。

指定した回数ループするには「For 文」をご覧ください。

Do While

Do While 条件 または Loop While 条件 のように入力し、改行して Loop を入力します。条件が一致する間 (True) ループします。

Dim i As Integer
i = 0

Do While i < 3 ' i が 3 より小さい間ループする
    i = i + 1
    Debug.Print(i)
Loop
Dim i As Integer
i = 0

Do 
    i = i + 1
    Debug.Print(i)
Loop While i < 3 ' i が 3 より小さい間ループする

2 つの違いは Do While 条件 にすると、一度もループしない可能性があります。 Loop While 条件 にすると最低 1 回はループされます。

条件には Boolean の値を指定すればいいので、Boolean 型の変数を指定したり、Function 関数を指定できます。

Dim 条件 As Boolean
条件 = True

Dim i As Integer
i = 0

Do While 条件
    i = i + 1

    If i = 3 Then    ' i が 3 になったら
        条件 = False ' ループを終了する
    End If
Loop
Do While 関数 ' 関数の戻り値が True の間ループする

Loop
複数条件を入力するには「If 文」をご覧ください。

While Wend

Do While と同様のループをする While Wend があります。

While 条件 のように入力し、改行して Wend を入力します。条件が一致する間 (True) ループします。

Dim i As Integer
i = 0

While i < 3 ' i が 3 より小さい間ループする
    i = i + 1
    Debug.Print(i)
Wend

While Wend ループは途中で抜けられません。そのため、通常は Do While を使用します。

Do Until

Do Until 条件 または Loop Until 条件 のように入力し、改行して Loop を入力します。条件に一致するまで (False) ループします。

Dim i As Integer
i = 0

Do Until i = 3 ' i が 3 になるまでループする
    i = i + 1
    Debug.Print(i)
Loop
Dim i As Integer
i = 0

Do 
    i = i + 1
    Debug.Print(i)
Loop Until i = 3 ' i が 3 になるまでループする

基本は Do While と同じです。終了条件が違うだけです。Do While でループを抜ける条件を入力する方がわかりやすいので、一般的に Do While を使用します。

複数条件を入力するには「If 文」をご覧ください。

Do Loop

Do を入力し、改行して Loop を入力します。その中の処理を無限ループします。

Do
    ' 無限ループ
Loop

Exit Do を入力してループを抜けます。「If 文」にループを抜ける条件を入力します。詳しくは下記の「Do ループを抜ける」をご覧ください。

Dim i As Integer
i = 0

Do
    i = i + 1
    If i = 3 Then ' 3 回目のループで抜ける
        Exit Do
    End If
Loop

ループを抜けないと無限ループするので、間違って実行したときは Ctrl + Break キーを入力して処理を中断できます。Break はキーボードの右上にある Pause と表記されているキーです。

Do ループを抜ける

Exit Do を入力して、すべての種類の Do を抜けられます。

Dim i As Integer
i = 0

Do While i < 5
    i = i + 1

    If i = 3 Then ' i が 3 になったら
        Exit Do   ' Do を抜ける
    End If

    Debug.Print(i) ' 1 2
Loop
' Exit Do の後はここから処理が行われる

何らかの理由でループを続行できなくなったときや、ループする必要がなくなったときに便利です。

Do Loop は無限ループするので、Exit Do を入力しないとループを抜けられません。

Dim i As Integer
i = 0

Do
    i = i + 1
    If i = 3 Then ' 3 回目のループで抜ける
        Exit Do
    End If
Loop

ループをスキップする (Continue)

ループをスキップして次のループへ移りたいときがあります。他の言語では Continue などでできますが VBA にその機能はありません。そこで GoTo 文を使用して同じことができます。

GoTo Continue のように入力して、ループをスキップできます。

Dim i As Integer
i = 0

Do While i < 5 ' i が 5 より小さい間ループする
    i = i + 1

    If (i Mod 2) = 0 Then ' i が偶数のときはスキップ
        GoTo Continue ' Continue: の行へ処理を飛ばす
    End If

    ' ここにループ処理
    Debug.Print(i) ' 1 3 5

Continue: ' GoTo Continue の後はここから処理が行われる
Loop
GoTo 文については「GoTo 文」をご覧ください。