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

VBA Do Loop 文

はじめに

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

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

Exit Do でループを抜けたり、Continue のように次のループへ飛ばせます。

  • 目次
    • Do Loop
    • Do を抜ける
    • 次のループへ

Do Loop

Loop

Doのように入力し、改行してLoopを入力します。その間の処理が無限ループします。


Do
    ' 無限ループ
Loop

処理を中断するにはCtrl + Breakキーを入力します。Break はキーボードの右上にある Pause と表記されているキーです。

このように Do Loop は無限ループするので、次の 2 種類の方法で終了条件を指定します。

While

条件が True の間ループします。

Do While 条件またはLoop While 条件のように入力します。


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

Until

条件が True になるまでループします。つまり False の間ループします。

Do Until 条件またはLoop Until 条件のように入力します。


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 になるまでループする

While も Until も同じ終了条件にできます。While の方がわかりやすいので、通常はそちらを使用します。

Do を抜ける

Exit Doのように入力します。ループの途中で Do 文を抜けられます。


Dim i As Integer
       
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 で無限ループしているときは「If 文」を終了条件にできます。While や Untile と違って処理の途中で終了できます。


Dim i As Integer
       
Do 
    i = i + 1
    
    If i = 3 Then ' i が 3 になったら
        Exit Do   ' Do を抜ける
    End If

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

次のループへ

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


Dim i As Integer

Do While i < 3
    i = i + 1

    If i = 2 Then
        GoTo Continue ' Continue: の行へ処理を飛ばす
    End If

    ' ここにループ処理
    Debug.Print(i) ' 1 3、i が 2 のときはここを通らない

Continue: ' GoTo Continue の後はここから処理が行われる
Loop
  • 目次
    • Do Loop
    • Do を抜ける
    • 次のループへ