はじめに
VBAでマクロを作成する際、特定の条件を満たした場合に、処理を途中で終了させたい場面がよくあります。例えば、「必要なファイルが見つからない」「入力必須のセルが空白である」といったケースです。
VBAには、処理を中断するためのステートメントとして、よく似た Exit Sub と End がありますが、この2つには明確な違いがあり、正しく使い分けないと意図しない結果を招くことがあります。
この記事では、Exit Sub と End のそれぞれの働きと、どのような場面でどちらを使うべきかを、分かりやすく解説します。
1. Exit Sub: 現在のプロシージャだけを抜ける
Exit Sub は、現在実行している Sub プロシージャ(マクロ)だけを途中で抜け、呼び出し元のプロシージャ(もしあれば)に処理を戻します。
サンプルコード
この例では、メインの MainProcess マクロが、補助的な CheckPrerequisites マクロを呼び出します。CheckPrerequisites の中で条件を満たさない場合、Exit Sub で補助マクロだけを終了し、処理はメインマクロに戻ります。
' メインの処理
Sub MainProcess()
' 補助マクロを呼び出す
Call CheckPrerequisites
' CheckPrerequisitesが正常に終われば、この行が実行される
MsgBox "メイン処理を実行します。", vbInformation
End Sub
' 事前チェックを行う補助マクロ
Sub CheckPrerequisites()
' D2セルが空白の場合、このプロシージャだけを抜ける
If IsEmpty(Range("D2").Value) Then
MsgBox "D2セルに担当者名が入力されていないため、処理を中断します。", vbExclamation
Exit Sub
End If
' D2セルに値があれば、この行が実行される
Debug.Print "事前チェック完了。"
End Sub
解説: D2セルが空白の場合、CheckPrerequisites は Exit Sub で終了しますが、呼び出し元の MainProcess は中断されず、次の行(MsgBox "メイン処理を実行します。")の実行を試みます。
2. End: 全てのVBAプログラムを強制終了する
End ステートメントは、より強力で、実行中の全てのVBAプログラムをその場で完全に停止させます。どのプロシージャから呼び出されても、全ての処理が即座に終了します。
サンプルコード
先ほどのコードの Exit Sub を End に置き換えてみましょう。
' メインの処理
Sub MainProcessWithEnd()
' 補助マクロを呼び出す
Call CheckPrerequisitesWithEnd
' CheckPrerequisitesWithEndでEndが実行されると、この行は決して実行されない
MsgBox "メイン処理を実行します。", vbInformation
End Sub
' Endを使ってVBA全体を停止させる補助マクロ
Sub CheckPrerequisitesWithEnd()
If IsEmpty(Range("D2").Value) Then
MsgBox "致命的なエラー: 担当者名がありません。全ての処理を終了します。", vbCritical
End ' VBAの実行をここで完全に停止
End If
End Sub
解説: D2セルが空白の場合、CheckPrerequisitesWithEnd の中で End が実行された瞬間に、VBAの全プログラムが停止します。そのため、呼び出し元の MainProcessWithEnd に処理が戻ることはなく、MsgBox "メイン処理を実行します。" が表示されることはありません。
使い分けのまとめ
| 項目 | Exit Sub | End |
| 効果の範囲 | 現在のプロシージャのみ | 全てのVBAプログラム |
| 動作 | 処理を中断し、呼び出し元に戻る | 処理をその場で完全に停止 |
| 主な用途 | ・条件分岐での正常終了<br>・補助的な処理の中断 | ・回復不能なエラー発生時<br>・プログラムの緊急停止 |
End は非常に強力な命令であり、オブジェクトのクリーンアップ処理などをスキップしてしまう可能性があるため、通常はあまり使用されません。 ほとんどの場合、Exit Sub(または Exit Function など)を使い、プロシージャごとに処理の流れを制御する方が、より安全で構造化されたプログラムになります。
致命的なエラーが発生し、プログラム全体をどうしても即座に停止させたい、という限定的な状況でのみ End を使用するようにしましょう。
【AI×就労支援】Neuro Dive(ニューロダイブ)で先端ITを学び、スペシャリストとしての就職を目指しませんか?
最後に宣伝をさせてください。
「AIやデータサイエンスを仕事にしたい」 「でも、独学には限界が…」
そんな方に知ってほしいのが、日本初の”先端IT特化型”就労移行支援『Neuro Dive』です。
IT職種への就職率80%超、職場定着率95%超という実績は、信頼の証。「学びたい」を「仕事」に繋げるプロフェッショナルです。
ご興味があれば、ぜひ公式サイトをチェックしてみてください。
