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

【VBAスタンダード対策】Do ... Loop Until(後判定)の罠とループ構造を攻略!

Do Until を記述する場所には、実は2つのパターンがあります。頭につける「前判定」と、お尻につける「後判定」です。条件式が全く同じでも、記述する場所によってループの実行回数が変わるという、VBAの構造的な仕組みを解き明かします。

1. 問題:後判定(Loop Until)における実行結果

【 問題 】 下記のコードを実行して PostTest プロシージャを呼び出した際、メッセージボックスに表示される数値はいくつでしょうか?

Sub PostTest()
    Dim n As Integer
    n = 10

    Do
        n = n + 5
    Loop Until n >= 10

    MsgBox n
End Sub

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

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

正解: ② 15

3. 解説:「まず動く」後判定と「まず確認する」前判定

Until(~になるまで)の位置が Do の後ろか、Loop の後ろかによって、プログラムの初期動作が変わる構造になっています。

[ 前判定と後判定の構造的な違い ]

■ 前判定(Do Until ── Loop)
ループに入る「前」に条件をチェックします。もし最初から n = 10 で、条件が n >= 10 だった場合、「あ、もうゴールしてるから入らない」となり、実行回数は 0回 になります。

■ 後判定(Do ── Loop Until) ※今回の問題
条件チェックが最後(Loopの後ろ)にあります。そのため、たとえ最初から条件(n >= 10)を満たしていても、上から流れてきた処理は必ず最初に1回実行されてしまいます。

・スタート時:n = 10
ループ突入:条件を見ずに、まず n = 10 + 5 = 15 を実行!
お尻で判定15 >= 10成立(True!) ⇒ 終了して脱出!

★ 結果として、必ず1回は処理が通るため、最終値は 15 になります。

ここが試験に出る!: スタンダード試験では、この「後判定(Do ... Loop Until)」を使ったコードを見せて、条件が最初から満たされているデータの場合に『1回実行されるか、0回か』を迷わせる問題が頻出します。「後判定は最低1回は絶対に通る構造」だと覚えておきましょう。


4. まとめ

「前判定は石橋を叩いて渡る(0回の可能性あり)、後判定は行動してから考える(最低1回は実行)」。この構造の使い分けができるようになると、実務でも『まず1行目のデータを処理してから、次の行があるか判定する』といった柔軟なスクリプトが組めるようになります。


PR