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。
