【VBAスタンダード対策】処理を中断する「Exit Sub」の構造を攻略!
Subプロシージャは通常、上から下へと順番に実行されますが、エラー発生時や特定の条件を満たした際に「それ以降の処理を行わずに呼び出し元へ戻る」という制御が必要になります。この「途中で終わる」ための正確な記述を確認しましょう。
1. 問題:プロシージャの中途終了
【 問題 】 以下のコードにおいて、変数 ans が 0 の場合に、メッセージを表示せずにプロシージャを途中で終了させたい。空欄 ( A ) に入る正確な記述はどれでしょうか?
If ans = 0 Then
( A )
End If
MsgBox "結果は " & ans & " です"
End Sub
① End ② Exit Sub ③ Stop ④ Return Sub
2. 正解:中途終了の構文に関する正解
正解: ② Exit Sub
3. 解説:なぜ「Exit Sub」でなければならないのか?
プロシージャを物理的な終端(End Sub)まで実行させずに、その場で呼び出し元に制御を戻す命令が Exit Sub です。これは「出口を無理やり作る」ような構造的役割を果たします。
Sub Main() Sub CheckValue(ans)
| +-------------------+
+--[ 呼出 ]-----------> | If ans = 0 Then |
| | Exit Sub ------|---(即座に復帰)
+<-[ 復帰 ]------------- | End If |
| | [以降の処理] |
| | End Sub |
| +-------------------+
[ 注意すべきキーワードの違い ]
★ Exit Sub:現在のプロシージャのみを終了し、呼び出し元へ戻ります。
★ End:プログラム全体の実行を完全に停止し、すべての変数をリセットします。影響範囲が大きすぎるため、中途終了には通常使いません。
1. ここが試験に出る!: 試験では「このコードを実行した際、MsgBoxが表示されるか否か」を問う形式で出題されます。If 文の条件が成立し、Exit Sub を踏んだ時点で、その下のコードは一行も実行されないという構造的遮断を正しく読み解く必要があります。
2. エンジニアの視点: Java 17などの return; ステートメントに相当します。異常な値を最初にはじく「ガード句」として Exit Sub を活用することで、後続のメインロジックをシンプルに保つことができ、保守性の高い「いけいけ」なコード構造が実現します。
4. まとめ
「異常があれば Exit Sub で即脱出」。この中途終了の構造を使いこなすことで、予期せぬエラーや不要な処理の実行を防ぐことができます。減数分裂が特定のチェックポイントで制御されるように、VBAも Exit Sub という関門を設けることで、確実かつ安全なプログラム制御が可能になるのです。