VBAテクニック集 VBA一覧 処理制御・待機・停止 文法・構文

【VBA】処理を途中で止めるコードの書き方と実務活用例

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

■ 注意点

  1. Exitで止めると以降のコードは実行されない
    • 宣言していた変数の解放や後処理が必要な場合は、止める前に明示的に実行しましょう。
  2. ループ中断とマクロ終了は別
    • Exit For / Exit Do はループだけ終了し、マクロ自体は続きます。
    • マクロ全体を止めたい場合は Exit Sub にします。
  3. 停止条件は明確に
    • 条件式があいまいだと、必要なときに処理が止まらないことがあります。

✅ 他の停止方法(応用編)

・ 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(推奨度低)

実務では、ただ止めるだけでなく、中止の理由をメッセージで伝えることが重要です。
そうすることで、後から実行ログを見返したときにも原因が分かりやすくなります。

-VBAテクニック集, VBA一覧, 処理制御・待機・停止, 文法・構文