忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【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

① 5(条件が最初から満たされていないため、1回も実行されない)
② 10(条件は満たしていないが、必ず1回は実行される)
③ 15
④ 判定が無限に繰り返されてフリーズ(無限ループ)する

2. 正解:後判定Whileループの処理フローに関する正解

正解: ② 10

3. 解説:「While(~の間)」が最後にある構造の罠

While は「条件が正しい(True)間は続ける」という構造ですが、それがお尻(Loopの後ろ)にあることで、実行タイミングに独特な変化が生まれます。

[ Loop While の実行フロー構造 ]

条件式: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