【用語集に記載の内容について】

用語集に記載されているメソッドや関数の引数は、VBAエキスパート試験の試験範囲に基づいており、すべての引数を網羅しておりません。 また、書式は公式テキストの記載に準じています。
試験範囲外の引数や詳細については、ヘルプ機能やオブジェクトブラウザーをご参照ください。

【コードをコピーして実行する場合の注意】

文字コードの関係上、半角の「¥」は「/」で表示されるため、当サイトでは全角の「¥」で記載しています。当サイトのコードをコピーして実行する場合は、全角の「¥」を半角の「¥」に変換してください。

Do…LoopステートメントのWhileキーワード

名称Do…LoopステートメントのWhileキーワード
説明
条件が正しい間は処理を繰り返す動作を指定します。

したがって、Do…Loopステートメントの条件にWhileキーワードを指定すると、条件がTrueの間は処理を繰り返します。
書式
【繰り返しの前で条件を判定する】
Do While 条件
    処理
Loop

【繰り返しの後で条件を判定する】
Do
    処理
Loop While 条件
コード例①
【繰り返しの前で条件を判定】
Sub Macro1()
    Dim i As Long
    i = 1
    Do While i < 3
        MsgBox i
        i = i + 1
    Loop
End Sub

「While i < 3」は、「i < 3」がTrueの間は処理を繰り返します。

Do…Loopステートメントは以下のように処理されます。
i = 1→ 「1 < 3」でTrue→ 「1」のメッセージボックスを表示
i = 2→ 「2 < 3」でTrue→ 「2」のメッセージボックスを表示
i = 3→ 「3 < 3」でFalse→ 繰り返し終了
コード例②
【繰り返しの後で条件を判定】
Sub Macro2()
    Dim i As Long
    i = 1
    Do
        MsgBox i
        i = i + 1
    Loop While i < 3
End Sub

繰り返しの後で条件判定を行うため、Do…Loop内の処理は必ず1回実行されます。

「While i < 3」は、「i < 3」がTrueの間は処理を繰り返します。

Do…Loopステートメントは以下のように処理されます。
i = 1→ 「1」のメッセージボックスを表示
i = 2→ 「2 < 3」でTrue→ 「2」のメッセージボックスを表示
i = 3→ 「3 < 3」でFalse→ 繰り返し終了
コード例③
【前判定と後判定の比較】
Sub Macro3()
    Dim i As Long
    i = 3
    Do While i < 3
        MsgBox i
        i = i + 1
    Loop
End Sub

Sub Macro4()
    Dim i As Long
    i = 3
    Do
        MsgBox i
        i = i + 1
    Loop While i < 3
End Sub

Macro3とMacro4の「While i < 3」は、「i < 3」がTrueの間は処理を繰り返します。

Macro3は、繰り返しの前で条件を判定しています。

Do…Loopステートメントは以下のように処理されます。
i = 3→ 「3 < 3」でFalse→ 繰り返し終了

Macro4は、繰り返しの後で条件を判定をしているため、Do…Loop内の処理は必ず1回実行されます。

Do…Loopステートメントは以下のように処理されます。
i = 3→ 「3」のメッセージボックスを表示
i = 4→ 「4 < 3」でFalse→ 繰り返し終了
コード例④
【無限ループ】
Sub Macro5()
    Dim i As Long
    i = 4
    Do While i > 3
        Debug.Print i
        i = i + 1
    Loop
End Sub

「While i > 3」は、「i > 3」がTrueの間は処理を繰り返します。

「While i > 3」は、iの値が3以下の場合にFalseになりますが、iの初期値が4であり、以降1ずつ増えていくので無限ループとなります。

「Debug.Print i」は、イミディエイトウインドウに値を主力します。

Do…Loopステートメントは以下のように無限ループとなります。
i = 4→ 「4 > 3」でTrue→ 「4」を出力
i = 5→ 「5 > 3」でTrue→ 「5」を出力
i = 6→ 「6 > 3」でTrue→ 「6」を出力
  :  :  :
カテゴリスタンダード