サイトについて      連絡先   検索

VBA Do Loop 文

はじめに

Excel VBA の Do Loop 文を使用してループする方法を紹介します。

Do Loop 文には条件が True の間ループする While と、True になるまでループする Until の二種類があります。

Exit Do で途中でループを抜けられます。

Do While: True の間ループ

Do と Loop のどちらかにWhile 条件を付けると、その条件が True の間ループします。

二つの違いは最初に評価したいか後で評価したいかです。Do While にすると最初から条件を満たしていれば、一度もループ処理をしません。コードのわかりやすさからも、通常は Do While にします。


Dim i As Integer

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

Dim i As Integer

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

必ずループの条件が True になる処理を書きます。そうしないと無限ループしフリーズした状態になります。テスト時はブレークポイントを設定して、無限ループしないように注意します。Ctrl + Breakキーを入力して、ループを中断できる可能性があるので、いざというときに覚えておくと便利です。

Do Until: True になるまでループ

Do と Loop のどちらかにUntil 条件を付けると、その条件が True になるまでループします。True になったときループを抜けます。

二つの違いは最初に評価したいか後で評価したいかです。コードのわかりやすさからも、通常は Do Until にします。


Dim i As Integer

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

Dim i As Integer

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

こちらも無限ループにならないように注意します。

Do While と Do Until のどちらを使えばいいのかは、Do While の方がわかりやすいためこちらを使います。Do Until の方が条件がわかりやすくなるときは、こちらを使います。

Exit Do: ループを抜ける

条件を満たす前にループを抜けたくなったらExit Doを使用します。


Dim i As Integer

Do While i < 5
    i = i + 1
    
    If i = 3 Then ' i が 3 になったら Do を抜けます。
        Exit Do
    End If

    Debug.Print (i)
Loop
' Exit Do の後はここから処理が行われます。

Do Loop

While と Until のどちらも書かないでループできます。ただしこの方法は無限ループするので、必ず Exit Do でループを抜ける必要があります。


Dim i As Integer

Do
    i = i + 1

    If i = 3 Then
        Exit Do ' これが無いと無限ループになる
    End If

    Debug.Print (i)
Loop

次のループへ

ループを一回飛ばして次のループへ移りたいとき、他の言語でよくある Continue は VBA には存在しません。GoTo 文を使用して同じようなことができます。


Dim i As Integer

Do While i < 5
    i = i + 1

    If i = 3 Then
        GoTo Continue ' Continue: の行へ処理を飛ばします。
    End If

    Debug.Print (i) ' i が 3 のときはここは通りません。

Continue: ' GoTo Continue の後はここから処理が行われます。
Loop

関連ページ