ExcelVBAでマクロを作成していると、処理の途中で条件に応じて実行を止めたい場面があります。
例えば、条件に合わない場合はそこで終了する、テスト用に途中までだけ実行する、ユーザーの確認後に続行を決める などです。
✅ 処理を途中で止める基本コード(Exit Sub
/ Exit Function
)
✅ 条件付きで処理を終了する方法
✅ ユーザー確認を挟んで途中で止める方法
✅ 実務的な活用パターン
✅ 注意点と代替方法
目次
✅ 基本的な「途中で止める」コード
VBAでは、途中で処理を止めるには以下のような構文を使います。
・ Exit Sub
Sub
プロシージャ(戻り値なしのマクロ)を途中で終了します。
Sub Sample()
MsgBox "最初の処理"
Exit Sub
MsgBox "この行は実行されません"
End Subさ
参考:【VBA】Exit Subが終わらない場合とは
・ Exit Function
Function
プロシージャ(戻り値ありの関数)を途中で終了します。
Function GetValue() As String
GetValue = "初期値"
Exit Function
GetValue = "この行は実行されません"
End Function
参考:【VBA】Exit Functionの基本~実用的な使い方
・ Exit For / Exit Do
ループの途中で終了して抜ける場合に使用します。
Sub LoopBreak()
Dim i As Long
For i = 1 To 10
If i = 5 Then
Exit For
End If
Debug.Print i
Next i
End Sub
参考:【VBA】処理を止める「Exit」の使い方|Sub・Function・ループでの中断方法を解説
✅ 条件付きで処理を止める
業務では「ある条件を満たさなければ処理を中断」することがよくあります。
・セルが空欄なら終了
Sub StopIfBlank()
If Range("A1").Value = "" Then
MsgBox "A1が空欄なので処理を中止します"
Exit Sub
End If
MsgBox "処理を続行します"
End Sub
・数値が基準以下なら終了
Sub StopIfLowValue()
If Range("B1").Value < 100 Then
MsgBox "B1の値が基準未満です"
Exit Sub
End If
MsgBox "基準を満たしたので処理を続行します"
End Sub
✅ ユーザー確認を挟んで止める
途中でユーザーに「続けますか?」と尋ね、いいえなら終了する方法です。
Sub ConfirmAndStop()
Dim answer As VbMsgBoxResult
answer = MsgBox("処理を続けますか?", vbYesNo + vbQuestion, "確認")
If answer = vbNo Then
MsgBox "処理を中止しました"
Exit Sub
End If
MsgBox "処理を続行します"
End Sub
✅ 実務での活用パターン
1. データチェック後に中止
大量データを処理する前に、事前条件を満たしているか確認し、満たさなければ途中で止めます。
Sub DataCheck()
If WorksheetFunction.CountA(Range("A1:A100")) = 0 Then
MsgBox "データが存在しません。処理を終了します"
Exit Sub
End If
' 処理続行
End Sub
2. 確認メッセージ後に実行
大きな変更や削除を行う前に、ユーザーの確認を取ります。
Sub DeleteWithConfirm()
If MsgBox("本当に削除しますか?", vbYesNo + vbExclamation) = vbNo Then
Exit Sub
End If
Range("A1:A10").ClearContents
End Sub
3. 開発・テスト時に途中まで実行
開発段階では全処理を実行せず、途中で止めて動作確認を行うことがあります。
Sub TestRun()
Debug.Print "Step 1 完了"
Exit Sub
Debug.Print "Step 2 完了" ' この行は実行されない
End Sub
■ 注意点
- Exitで止めると以降のコードは実行されない
- 宣言していた変数の解放や後処理が必要な場合は、止める前に明示的に実行しましょう。
- ループ中断とマクロ終了は別
Exit For
/Exit Do
はループだけ終了し、マクロ自体は続きます。- マクロ全体を止めたい場合は
Exit Sub
にします。
- 停止条件は明確に
- 条件式があいまいだと、必要なときに処理が止まらないことがあります。
✅ 他の停止方法(応用編)
・ End ステートメント
VBAの実行を完全に終了させます。
End
- 突然終了するため、後処理や変数の解放が行われません。
- 基本的には
Exit Sub
/Exit Function
を推奨。
参考:【VBA】処理を止める「Exit」の使い方|Sub・Function・ループでの中断方法を解説
・ エラーを利用して中止
あえてエラーを発生させて処理を終了する方法もありますが、通常は推奨されません。
Err.Raise vbObjectError + 1, , "強制終了"
参考:【VBA】On Error Resume Nextでエラーを無視してエラーの制御
✅ まとめ
- 途中で止める基本コード →
Exit Sub
,Exit Function
,Exit For
,Exit Do
- 条件付き中止 → If文+Exit構文で制御
- ユーザー確認後に中止 →
MsgBox
のYes/No判定 - 完全終了 →
End
(推奨度低)
実務では、ただ止めるだけでなく、中止の理由をメッセージで伝えることが重要です。
そうすることで、後から実行ログを見返したときにも原因が分かりやすくなります。