Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 - Do While

Excel VBA VBA
スポンサーリンク

Do While は「条件が成り立つあいだ、ずっと繰り返す」ループ

For文は「何回繰り返すか」があらかじめ決まっているループでした。
一方 Do While は、

「この条件が True のあいだは、ずっと繰り返してね」

という、“回数ではなく条件で続けるかどうかを決めるループ”です。

人間の言葉にすると、

「まだ〇〇なら、もう一回やる。〇〇じゃなくなったらやめる」

という感じです。
「いつ終わるかは、条件しだい」というのが、Forとの一番大きな違いです。


Do While の基本構文と動き方

いちばん基本の形

よく使う形はこれです。

Do While 条件式
    ' 繰り返したい処理
Loop
VB

流れはこうです。

  1. まず「条件式」を評価する
  2. True なら中の処理を実行
  3. 処理が終わったら、また条件式を評価
  4. True のあいだは何度も繰り返す
  5. False になった瞬間にループを抜ける

簡単な例を見てみます。

Sub SampleDoWhileBasic()

    Dim i As Long
    i = 1

    Do While i <= 5
        MsgBox i
        i = i + 1
    Loop

End Sub
VB

このときの流れを、あえて丁寧に追ってみます。

  1. i = 1
  2. 条件 i <= 5 を評価 → 1 <= 5 → True
  3. MsgBox 1 を表示
  4. i = i + 1 → i は 2
  5. 再び条件 i <= 5 → 2 <= 5 → True
  6. MsgBox 2 …

これを i が 6 になるまで繰り返し、
6 <= 5 が False になったところでループ終了です。

ここで重要なのは、

「条件が変わるように、自分で中で値を更新している」

という点です。
これを忘れると“無限ループ”になります。


For と Do While の違いを感覚でつかむ

For は「回数が決まっているとき」

For i = 1 To 5
    MsgBox i
Next i
VB

これは「5回だけやる」と最初から決まっています。
開始値・終了値・Step で、回数がはっきりしているループです。

Do While は「いつ終わるか条件しだいのとき」

Do While Range("A1").Value <> ""
    ' A1 が空になるまで何かする
Loop
VB

こういう書き方は、
「A1 が空になる“まで”続けたい」
という、“終わりのタイミングがデータしだい”な場面に向いています。

「何回やるか」ではなく「いつまでやるか」で考えるとき、
Do While のほうが自然に書けます。


Excel らしい実用例:下までデータが続く行をたどる

A列の「最後のデータ行」まで処理する

「A1 から下に向かって、空白になるまで処理したい」
これは Excel VBA でよくあるパターンです。

Sub SampleDoWhileRows()

    Dim r As Long
    r = 1   ' 1行目からスタート

    Do While Range("A" & r).Value <> ""
        Range("B" & r).Value = "処理済"
        r = r + 1
    Loop

End Sub
VB

流れを言葉にすると、

  1. r = 1(1行目)
  2. A1 が空でないあいだ、ループを続ける
  3. B1 に「処理済」と書く
  4. r を 2 にして、A2 を見る
  5. A2 が空でないなら、また B2 に「処理済」
  6. どこかの行で Aセルが空になったら、その時点でループ終了

ここでのポイントは、

「どこまでデータがあるか分からない」
「でも“空になるまで”下にたどりたい」

という“終わりがデータしだい”な状況に、Do While がぴったりハマっていることです。

For で書こうとすると、「最終行を先に調べる」などの一手間が必要になりますが、
Do While なら「空になるまで」という条件だけで書けます。


Do While で一番大事なこと:条件が変化するように書く

無限ループの典型パターン

次のコードを見てください。

Sub BadDoWhile()

    Dim i As Long
    i = 1

    Do While i <= 5
        MsgBox i
        ' i = i + 1 を書き忘れた!
    Loop

End Sub
VB

これは、実行すると「1」が永遠に出続ける“無限ループ”になります。

理由はシンプルで、

  • 条件は i <= 5
  • i は 1 のまま変わらない
  • だから、いつまでたっても 1 <= 5 が True のまま

だからです。

Do While を書くときに、
「ループの中で、条件に関わる値を必ず変化させているか?」
を必ずチェックしてください。

条件に関わる変数・セルを意識する

例えば、

Do While Range("A1").Value <> ""
    ' ここで A1 の値を変えないと、条件は永遠に変わらない
Loop
VB

このように、「A1 が空かどうか」でループしているのに、
中で A1 を空にする処理を書かなければ、やはり無限ループになります。

Do While を書いたら、必ず自分にこう聞いてください。

「この条件が、ループの中で“いつか False に変わるように”なっているか?」

ここが Do While を安全に使うための一番重要なポイントです。


Do While と Do Loop While の違い(上で判定か、下で判定か)

先に条件をチェックする Do While

今まで見てきたのは、これです。

Do While 条件式
    ' 処理
Loop
VB

これは、「最初に条件をチェックしてから処理する」形です。
条件が最初から False なら、一度も中身は実行されません。

先に一回実行してから条件をチェックする Do Loop While

もう一つ、こういう書き方もあります。

Do
    ' 処理
Loop While 条件式
VB

これは、

  1. まず必ず一回、処理を実行
  2. そのあとで条件をチェック
  3. True ならもう一回、False なら終了

という流れになります。

「最低でも一回は必ず実行したい」
「そのあと、条件しだいで続けるか決めたい」

というときは、こちらの形が向いています。

簡単な比較例

Sub SampleDoWhileTop()

    Dim i As Long
    i = 10

    Do While i < 5
        MsgBox "上判定: " & i
        i = i + 1
    Loop

End Sub
VB

これは、最初の時点で i < 5 が False なので、一度も実行されません。

Sub SampleDoWhileBottom()

    Dim i As Long
    i = 10

    Do
        MsgBox "下判定: " & i
        i = i + 1
    Loop While i < 5

End Sub
VB

こちらは、条件が False でも、最初の一回は必ず実行されます。
そのあとで i < 5 をチェックして、すぐ終わります。

「最初から条件を満たしていないなら、何もしない」
なら上判定(Do While ~ Loop)、

「条件に関係なく、一回は必ずやりたい」
なら下判定(Do ~ Loop While)、

という使い分けです。


まとめ:Do While は「終わりが条件で決まるループ」

Do While の本質は、

「この条件が True のあいだ、ずっと繰り返す」
「False になった瞬間にやめる」

という、とてもシンプルなものです。

押さえておきたいポイントをコンパクトにまとめると、

Do While は「回数」ではなく「条件」で続けるかどうかを決める
条件に関わる値(変数・セル)を、ループの中で必ず変化させる
変化させないと、簡単に無限ループになる
「データが続く限り」「空になるまで」など、“終わりがデータしだい”な処理に向いている
上判定(Do While ~ Loop)と下判定(Do ~ Loop While)を使い分けられる

タイトルとURLをコピーしました