【VBAスタンダード対策】Do ... Loop While(後判定)の条件とループ構造を攻略!
お尻に条件を書く「後判定」のもう一つの形が Do ... Loop While です。「条件を満たしている間は繰り返す」というWhileの性質を持ちながら、お尻で判定するため「最低1回は実行される」という、VBAループ構文の中で最も見極めが必要な構造を持っています。
1. 問題:後判定(Loop While)における実行結果
【 問題 】 下記のコードを実行して PostWhileTest プロシージャを呼び出した際、メッセージボックスに表示される数値はいくつでしょうか?
Sub PostWhileTest()
Dim n As Integer
n = 5
Do
n = n + 5
Loop While n < 5
MsgBox n
End Sub
Dim n As Integer
n = 5
Do
n = n + 5
Loop While n < 5
MsgBox n
End Sub
① 5(条件が最初から満たされていないため、1回も実行されない)
② 10(条件は満たしていないが、必ず1回は実行される)
③ 15
④ 判定が無限に繰り返されてフリーズ(無限ループ)する
2. 正解:後判定Whileループの処理フローに関する正解
正解: ② 10
3. 解説:「While(~の間)」が最後にある構造の罠
While は「条件が正しい(True)間は続ける」という構造ですが、それがお尻(Loopの後ろ)にあることで、実行タイミングに独特な変化が生まれます。
[ Loop While の実行フロー構造 ]
条件式:n < 5 (nが5未満の間はループを続ける!)
・スタート時:n = 5
・ループ突入:後判定なので、最初の条件チェックはスルー!
まず
・お尻で判定:ここで初めて
現在の n は 10 なので、
★
条件式:n < 5 (nが5未満の間はループを続ける!)
・スタート時:n = 5
・ループ突入:後判定なので、最初の条件チェックはスルー!
まず
n = 5 + 5 = 10 を実行します。・お尻で判定:ここで初めて
Loop While n < 5 の判定を行います。現在の n は 10 なので、
10 < 5 は不成立(False!)になります。★
While は「Trueの間だけ続ける」構造なので、Falseになった瞬間にループは終了(脱出)します。結果として、最初の1回だけが実行され、最終値は 10 になります。ここが試験に出る!: スタンダード試験では、前判定の Do While なら実行回数が0回になるようなデータを用意し、あえて後判定の Do ... Loop While にすることで「最初の1回が実行されて値が変わる」というミスを誘ってきます。「While=Trueの間」「Loopの後ろ=最低1回実行」の2つの構造を掛け合わせて、落ち着いてトレースしましょう。
4. まとめ
「Loop Whileは、まずやってみてから、続けるかどうかを判断する」。この後判定構造を理解すれば、すべてのDoループ(Whileの前・後、Untilの前・後)の仕分けは完璧です。データの初期状態に左右されない、正確な繰り返し処理をコントロールしましょう。
PR