ExcelVBA プログラム無限ループやエラーで停止しない|強制終了のやり方

 

ExcelVBA  無限ループに陥ったり、エラーで停止しない場合 に、処理を強制的に終了させるために使用します。 使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!

👇実務で“そのまま使える”テンプレ付きで、コピペするだけ
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き

 

Excel VBA 強制的に終了|シーン

以下のシーンで利用します。

1.無限ループを止めたい。

2.処理の途中で特定の条件に達したら強制終了したい。

3.ユーザーがボタンを押したらマクロを中断したい。

 

Excel VBA 強制的に終了サンプルコード

End ステートメントを使う(すべての処理を強制終了)

標準モジュール

Option Explicit

Sub 強制終了_End()
    ' 何らかの処理
    MsgBox "処理を強制終了します", vbExclamation

    ' マクロを強制終了
    End
End Sub
ポイント

・VBAの実行を即座に停止し、すべての変数をリセットする

・リソース解放が行われないため、頻繁な使用は非推奨

・End を使用すると、すべての変数が初期化されるため、開いたブックやファイルが閉じられないことがあります。 

自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。

👉無料ExcelVBAベーシック選択問題138問

Exit Sub や Exit Function を使う(特定の処理のみ中断)

標準モジュール

Option Explicit

Sub 強制終了_ExitSub()
    Dim i As Integer

    ' 繰り返し処理
    For i = 1 To 10
        If i = 5 Then
            MsgBox "処理を中断します", vbExclamation
            Exit Sub  ' ここで処理を中断
        End If
        Debug.Print "i=" & i
    Next i
End Sub
ポイント

・指定したプロシージャ(SubやFunction)のみ終了できる。

・他のマクロへの影響を避けるため、推奨される方法

DoEvents を活用して中断(ユーザー操作を許可)

標準モジュール

Option Explicit

Sub 強制終了_DoEvents()
    Dim i As Long
    For i = 1 To 1000000
        ' 画面を更新しながら処理する
        DoEvents
        If i Mod 10000 = 0 Then Debug.Print i
    Next i
End Sub
ポイント

・無限ループを防ぐためにユーザーの操作を受け付ける。

・ループの途中で  ESC キーや Ctrl + Break で停止可能

・長時間のループ処理では、DoEvents を適宜入れることで中断しやすくなる

 

Excel VBA強制的に終了|まとめ

方法 特徴 用途 注意点
End 全マクロを強制終了 無限ループやエラー発生時 変数がリセットされるので慎重に使用
Exit Sub / Exit Function 指定の処理だけ終了 条件付き終了 他の処理に影響を与えない
DoEvents 途中で中断しやすくする 長時間のループ処理 使いすぎると処理速度が低下

 

Excel VBAエキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。

👉無料ExcelVBAベーシック選択問題138問