
Excelマクロを書いていると、必ず出会うのが 繰り返し処理(ループ)。
その中でも、多くの初心者がつまずくのがこの2つです。
-
Do While -
Do Until
名前は似ているのに、
「どっちを使えばいいの?」
「条件が逆?」
と混乱しがちですよね。
でも大丈夫。
考え方はとてもシンプルです。
この記事では、動く実例付きでスッと理解できるように解説します。
🌱 まず結論:Do While と Do Until の違いはこれ!
| 文 | 繰り返す条件 |
|---|---|
Do While 条件 |
条件がTrueの間、繰り返す |
Do Until 条件 |
条件がTrueになるまで、繰り返す |
👉 「While=〜の間」
👉 「Until=〜になるまで」
この日本語イメージが超重要です。
🔁 Do While の基本構文
Do While 条件
繰り返したい処理
Loop
例:セルA1が空白の間、下に進む
Sub DoWhileSample()
Dim r As Long
r = 1
Do While Cells(r, 1).Value <> ""
Debug.Print Cells(r, 1).Value
r = r + 1
Loop
End Sub
👉 A列に値がある間だけ処理する
👉 空白になった瞬間に終了
🔁 Do Until の基本構文
Do Until 条件
繰り返したい処理
Loop
例:セルA1が空白になるまで進む
Sub DoUntilSample()
Dim r As Long
r = 1
Do Until Cells(r, 1).Value = ""
Debug.Print Cells(r, 1).Value
r = r + 1
Loop
End Sub
👉 見てください。
👉 処理内容は Do While とほぼ同じです。
🤔 え?同じじゃない?
そう思った方、鋭いです。
実はこの2つは、
条件を書き換えれば同じ動きになります。
| Do While | Do Until |
|---|---|
Do While A <> "" |
Do Until A = "" |
つまり、
-
Do While → 続ける条件を書く
-
Do Until → やめる条件を書く
という考え方の違いだけなんです。
⚠ よくある初心者の混乱ポイント
❌ 無限ループになる例
Do While Cells(1, 1).Value <> ""
Debug.Print "ずっと終わらない…"
Loop
👉 ループ内で 条件が変化していない
👉 永遠に True → 無限ループ
✅ 正しい例
Dim r As Long
r = 1
Do While Cells(r, 1).Value <> ""
Debug.Print Cells(r, 1).Value
r = r + 1 ' ← これが超重要
Loop
条件に関わる変数は必ず更新する!
これがループの鉄則です。
🔄 後判定ループ(最低1回は必ず実行)
実は Do While / Do Until には 後判定型もあります。
Do While Loop(後判定)
Do
処理
Loop While 条件
Do Until Loop(後判定)
Do
処理
Loop Until 条件
例:最低1回は必ず処理したい場合
Sub DoLoopSample()
Dim r As Long
r = 1
Do
Debug.Print Cells(r, 1).Value
r = r + 1
Loop Until Cells(r, 1).Value = ""
End Sub
👉 セルA1が空でも 1回は実行される
👉 入力チェックやユーザー操作向き
🧭 For文との使い分けは?
| 処理内容 | 向いている文 |
|---|---|
| 回数が決まっている | For |
| 条件で終わる | Do While / Do Until |
| 最終行が不明 | Do While |
| 終了条件が明確 | Do Until |
👉 「何回かわからない」= Do系
👉 「回数が決まってる」= For
🪄 実務でよく使うパターン
-
空白行までデータを処理
-
条件を満たすまで入力待ち
-
ファイルが存在する間処理
-
エラーが出るまで繰り返す
Do While Dir(filePath) <> ""
' ファイルがある間処理
Loop
✨ まとめ(ここだけ覚えればOK)
-
Do While → 条件がTrueの間続く
-
Do Until → 条件がTrueになったら止まる
-
書き方の違い=考え方の違い
-
条件に関わる変数更新を忘れない