Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Excelマクロ入門】Do While と Do Until の違いを完全理解!実例でスッとわかるループ処理

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になったら止まる

  • 書き方の違い=考え方の違い

  • 条件に関わる変数更新を忘れない