【VBAスタンダード対策】Do While ・・・ Loop ループの正しい構文と制御構造!
指定した条件が満たされている間、処理を何度も繰り返す Do While ループ。For文とは異なり、「あらかじめ回数が決まっていない処理」に最適な構文ですが、正しいキーワードの組み合わせと、無限ループを防ぐための構造を理解する必要があります。
1. 問題:Do While ループの文法と実行結果
【 問題 】 下記のコードを実行して LoopTest プロシージャを呼び出した際、メッセージボックスに表示される数値はいくつでしょうか?
Sub LoopTest()
Dim n As Integer
n = 1
Do While n < 5
n = n + 2
Loop
MsgBox n
End Sub
Dim n As Integer
n = 1
Do While n < 5
n = n + 2
Loop
MsgBox n
End Sub
① 3
② 5
③ 7
④ 構文エラー(コンパイルエラー)が発生する
2. 正解:Do While ループの処理フローに関する正解
正解: ② 5
3. 解説:「条件を満たしている間だけ」回る構造
Do While ループを正確に読み解くには、構文の正しいペアと、変数が変化するタイミング(タイムライン)を構造的に追う必要があります。
[ 構文ルールと実行フローの構造 ]
1. ペアは必ず「Do While」と「Loop」
VBAにおいて、
2. 処理のトレース(追跡)
・スタート時:n = 1
・1回目判定:1 < 5 は成立(True)⇒ 内部へ進む ⇒ n = 1 + 2 = 3
・2回目判定:3 < 5 は成立(True)⇒ 内部へ進む ⇒ n = 3 + 2 = 5
・3回目判定:5 < 5 は不成立(False!) ⇒ ループを抜ける
★ 結果として、ループを脱出した直後の n の値は 5 になっています。
1. ペアは必ず「Do While」と「Loop」
VBAにおいて、
Do While で始めたループは、必ず Loop キーワードで閉じます。End や End Do、あるいは単に Wend(※古い型)を使うとエラーになります。2. 処理のトレース(追跡)
・スタート時:n = 1
・1回目判定:1 < 5 は成立(True)⇒ 内部へ進む ⇒ n = 1 + 2 = 3
・2回目判定:3 < 5 は成立(True)⇒ 内部へ進む ⇒ n = 3 + 2 = 5
・3回目判定:5 < 5 は不成立(False!) ⇒ ループを抜ける
★ 結果として、ループを脱出した直後の n の値は 5 になっています。
ここが試験に出る!: スタンダード試験では、「Do Whileの条件式がいつ評価されるか」や「ループを抜けた瞬間の変数の正確な値」がよく問われます。また、内部でカウンタ変数(n = n + 2 など)を更新し忘れると、条件がずっと成立したままになり、マクロがフリーズする「無限ループ」を引き起こす構造上のリスクについても意識しておきましょう。
4. まとめ
「Do While の終わりは Loop。条件が崩れた瞬間に外へ」。この基本フローを脳内にインストールしておけば、セルを上から順番にチェックして「空欄になるまで続ける」といった実務で最もよく使うデータスキャン処理を安全かつ正確に実装できるようになります。
PR