Excel VBA 逆引き集 | Do 〜 Loop(条件付き)

Excel VBA
スポンサーリンク

Do 〜 Loop(条件付き)

「条件を満たす間だけ繰り返す」「条件を満たすまで繰り返す」ための基本ループが Do…Loop
For…Next が「回数指定」なのに対して、Do…Loop は「条件指定」で柔軟に繰り返せます。初心者向けに最短コードから実務テンプレートまで整理しました。


基本構文

Do While … Loop(条件が真の間繰り返す)

Sub DoWhile_Basic()
    Dim i As Long
    i = 1
    Do While i <= 10
        Cells(i, 1).Value = i
        i = i + 1
    Loop
End Sub
VB
  • ポイント:
    • 条件が True の間だけ繰り返す。
    • 条件判定はループの最初に行われる。

Do Until … Loop(条件が真になるまで繰り返す)

Sub DoUntil_Basic()
    Dim i As Long
    i = 1
    Do Until i > 10
        Cells(i, 2).Value = i * 10
        i = i + 1
    Loop
End Sub
VB
  • ポイント:
    • 条件が True になるまで繰り返す。
    • 「終了条件」を書くと理解しやすい。

Do … Loop While / Do … Loop Until(後判定)

Sub DoLoop_AfterCheck()
    Dim i As Long
    i = 1
    Do
        Cells(i, 3).Value = i * i
        i = i + 1
    Loop Until i > 10
End Sub
VB
  • ポイント:
    • ループの最後で条件判定。
    • 最低1回は必ず実行される

条件付きの実務テンプレート

'1) 最終行まで繰り返し(A列基準)
Sub DoLoop_ToLastRow()
    Dim r As Long
    r = 2
    Do While Cells(r, "A").Value <> ""
        Cells(r, "E").Value = Cells(r, "C").Value * Cells(r, "D").Value
        r = r + 1
    Loop
End Sub

'2) 空白行を飛ばして処理
Sub DoLoop_SkipBlanks()
    Dim r As Long
    r = 2
    Do Until Cells(r, "A").Value = ""
        If Cells(r, "B").Value <> "" Then
            Cells(r, "F").Value = "OK"
        End If
        r = r + 1
    Loop
End Sub

'3) 条件成立で途中終了(Exit Do)
Sub DoLoop_ExitEarly()
    Dim r As Long
    r = 2
    Do While Cells(r, "A").Value <> ""
        If Cells(r, "E").Value > 1000000 Then
            Cells(r, "F").Value = "しきい値超過"
            Exit Do
        End If
        r = r + 1
    Loop
End Sub
VB
  • Do While: データがある間だけ処理。
  • Do Until: 空白になるまで処理。
  • Exit Do: 条件成立で即終了。

例題で練習

例題1:売上表の最終行まで「数量×単価」を計算

Sub Example_CalcSales()
    Dim r As Long
    r = 2
    Do While Cells(r, "A").Value <> ""
        Cells(r, "E").Value = Cells(r, "C").Value * Cells(r, "D").Value
        r = r + 1
    Loop
End Sub
VB

例題2:顧客名が「終了」になるまで処理

Sub Example_StopAtKeyword()
    Dim r As Long
    r = 2
    Do Until Cells(r, "B").Value = "終了"
        Cells(r, "F").Value = "処理済"
        r = r + 1
    Loop
End Sub
VB

例題3:最低1回は必ず実行(後判定)

Sub Example_DoAtLeastOnce()
    Dim r As Long
    r = 2
    Do
        Cells(r, "G").Value = "チェック済"
        r = r + 1
    Loop Until Cells(r, "B").Value = ""
End Sub
VB

実務の落とし穴と対策

  • 無限ループに注意: 条件が変化しないと永久に回り続ける。必ずループ内で変数や行番号を更新する。
  • 終了条件の明確化: 「空白になるまで」「特定値に達するまで」といった終了条件を明示すると安全。
  • Exit Doの活用: 特定条件で即終了できる。検索や最初の一致処理に便利。
  • For…Nextとの使い分け: 回数が決まっているなら For…Next、終了条件が柔軟なら Do…Loop。
タイトルとURLをコピーしました