【VBAスタンダード対策】Exit For 脱出時の「カウンタ変数」の値を構造的に見抜く!
ループ処理を途中で強制終了する Exit For。しかし、途中で脱出した瞬間、ループの回数を数えていた「カウンタ変数」の中身がいくつになっているか、正確に把握できていますか? 試験で狙われる変数の内部構造を解き明かします。
1. 問題:Exit For を実行した直後の変数の中身
【 問題 】 下記のコードを実行して LoopTest プロシージャを呼び出した際、メッセージボックスに表示される数値はいくつでしょうか?
Dim i As Integer
For i = 1 To 10
If i = 5 Then
Exit For
End If
Next i
MsgBox i
End Sub
① 4
② 5
③ 6
④ 11
2. 正解:ループ脱出時の変数状態に関する正解
正解: ② 5
3. 解説:途中で抜けた時と、最後まで回った時の「違い」
Forループにおけるカウンタ変数 i の値は、「どこで処理が中断されたか」によって、その後の構造的な値が全く異なります。
・i = 1, 2, 3, 4 ── 順調に処理
・i = 5 になった!
│
├── If i = 5 Then が成立
└── Exit For が実行される
★ 途中で脱出した場合(今回)
Exit For は、Next i(値を+1する処理)に到達する前に、ループの外へジャンプする構造です。そのため、変数 i は 5 のまま保持されます。★ 比較:もし途中で抜けずに「完走」した場合
10回目(i=10)の処理が終わり、
Next i を通ることで iは 11 に増えます。そこで初めて「10を超えたから終了」と判定されるため、完走時の最終値は 11 になる構造を持っています。1. ここが試験に出る!: スタンダード試験では、「Exit Forで抜けた時はその時点の値(5)」になり、「最後まで完ソウした時は上限+ステップ値(11)」になるという、カウンタ変数の最終的な数値の違いを確実に突いてきます。メッセージボックスがどこで実行されているかを落ち着いて読み解きましょう。
2. エンジニアの視点: Java 17などの `for (int i=1; i<=10; i++)` 内で `break;` する構造と同じですが、VBAの `Next` は「値を増やして判定に戻る」という明確なステップ構造を意識しやすいのが特徴です。実務において、ループを抜けた後に「データが見つかって途中で抜けた(i<=10)」のか、「最後まで見つからなかった(i=11)」のかを判定するスマートな理系NEO設計によく使われます。
4. まとめ
「Exit ForはNextを通らないから、その時の値のまま」。このループ構造の仕組みを理解しておけば、条件に合致したデータが何番目に見つかったかを正確に捉えることができます。変数の変化を頭の中でシミュレーションして、完璧なアルゴリズムを構築しましょう。