【VBAスタンダード対策】Do Until ・・・ Loop の終了条件と制御構造を攻略!
Do While が「条件を満たしている間」ループを続けるのに対し、Do Until は「条件を満たすまで(満たした瞬間に終了)」ループを続ける構造を持っています。この2つの「条件の判定基準の違い」を完璧に整理しましょう。
1. 問題:Do Until ループの処理フローと実行結果
【 問題 】 下記のコードを実行して UntilTest プロシージャを呼び出した際、メッセージボックスに表示される数値はいくつでしょうか?
Sub UntilTest()
Dim n As Integer
n = 1
Do Until n >= 5
n = n + 2
Loop
MsgBox n
End Sub
Dim n As Integer
n = 1
Do Until n >= 5
n = n + 2
Loop
MsgBox n
End Sub
① 3
② 5
③ 7
④ 条件が最初から満たされていないため、ループは1回も回らず 1 と表示される
2. 正解:Do Until ループの条件判定に関する正解
正解: ② 5
3. 解説:「条件が成立(True)したら脱出」という構造
Do Until を読み解く最大の鍵は、「条件式が True になった瞬間に、ループの処理を止めて外へ抜ける」という判定構造にあります。
[ Do Until の実行フロー構造 ]
条件式:n >= 5 (nが5以上になったら終了!)
・スタート時:n = 1
・1回目判定:1 >= 5 は不成立(False)⇒ まだ終了しない(実行!) ⇒ n = 1 + 2 = 3
・2回目判定:3 >= 5 は不成立(False)⇒ まだ終了しない(実行!) ⇒ n = 3 + 2 = 5
・3回目判定:5 >= 5 は成立(True!) ⇒ ここでループ終了(脱出!)
★ したがって、ループを抜けた直後の n の値は 5 になります。
条件式:n >= 5 (nが5以上になったら終了!)
・スタート時:n = 1
・1回目判定:1 >= 5 は不成立(False)⇒ まだ終了しない(実行!) ⇒ n = 1 + 2 = 3
・2回目判定:3 >= 5 は不成立(False)⇒ まだ終了しない(実行!) ⇒ n = 3 + 2 = 5
・3回目判定:5 >= 5 は成立(True!) ⇒ ここでループ終了(脱出!)
★ したがって、ループを抜けた直後の n の値は 5 になります。
ここが試験に出る!: スタンダード試験では、「同じ処理を Do While と Do Until で書き換える」という問題が頻出します。今回のコードを While で書くなら、条件式は真逆の Do While n < 5 になります。「Until の条件式は、ループを抜けたい時の最終ゴールを書く」という構造の違いを絶対に忘れないでください。
4. まとめ
「Untilは条件がTrueになったら終わり(ゴール)。それまでは回り続ける」。この構造さえ押さえておけば、「セルが空白(="")になるまで処理を続ける」といった実務の大量データ処理も、終了条件を迷わずに一発で記述できるようになります。
PR