更新日:、 作成日:
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 のようにして、ループをスキップできます。
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
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 を使用します。
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
スポンサーリンク