はじめに
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 を使用するようにしましょう。
技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。
気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。
