VBAの処理が無限ループしてしまたり、処理が重すぎて途中で終了させたいときなど、強制終了させたい場面は多々あります。
VBA処理を強制終了させるには以下の方法があります。
- ボタンで強制終了させる方法
- Endメソッドを使った強制終了方法
- 処理を強制終了できないときの対応方法
今回はVBAの処理を強制終了させる方法について徹底的に解説していきますね☆
ExcelVBA|マクロを停止させる3つの強制終了の方法
マクロを実行して無限ループに陥った場合などに、処理を強制終了させるには以下の方法があります。
- ボタンで強制終了させる方法
- Endメソッドを使った強制終了方法
- 処理を強制終了できないときの対応方法
方法1.ボタンで強制終了させる方法
無限ループや処理が重いときにWindowsとMacには、キーボードで強制終了させる方法が用意されています。ちなみにWindowsとMacでは矯正終了の方法は異なります。
VBAの強制終了ボタン:Windows
- Ctrl + Pause(またはBreak)
- Esc
VBAの強制終了ボタン:Mac
- command + .(ピリオド)
- command + control + Esc
- Esc(2回押し)
方法2.Endメソッドを使った強制終了方法
実行中のマクロを強制的に終了させるには、Endステートメントを使う方法があります。
Endステートメントはプロシージャを終了させます。
使い方としては、あらかじめEndステートメントをコード内に組み込んで、ある条件になったら処理を強制的に終了させる、という使い方ができます。
Endステートメントの構文は、処理を終了させたい部分に「End」と記述するだけです。
具体的には以下のサンプルコードのようになります。以下の例はユーザーが入力した数字が4だったときにプロシージャを終了させます。
Sub End実行()
Dim inputSuji As Long
inputSuji = InputBox("数字を入力してください")
If inputsuj = 4 Then '入力値が4だったら処理終了する
End
End If
End Sub
また、Endステートメントには以下の種類があります。
ステートメント | 内容 |
---|---|
End | プログラムの実行を終了させる。 |
End Function | Functionステートメントを終了させる。 |
End If | If…Then…Elseステートメントを終了させる。 |
End Property | Property Let、Property Get、または Property Setプロシージャを終了させる。 |
End Select | Select Caseステートメントを終了させる。 |
End Sub | Subステートメントを終了させる。 |
End Type | Typeステートメントを終了させる。 |
End With | Withステートメントを終了させる。 |
なお、Endメソッドをあらかじめ無限ループが予想される直前に記述し「OnTimeメソッドで一定時間経過後にEndメソッドを実行する」という以下のような記述ではコードではEndメソッドが発動しないので注意してください。
例えば、以下のサンプルコードでは「必ず無限ループしてしまうforループの直前に5秒経過したらEndメソッドを発動する」という動作をするはずですが、無限ループになったままEndが発動しません。
Sub 無限ループ()
Application.OnTime Now + TimeValue("00:00:05"), "End実行"
For i = 1 To 10
i = 3
Next i
End Sub
Sub End実行()
End
End Sub
その理由として、無限ループに陥っているForループの処理が動いている以上、次の処理が開始できず、Endが発動しないのではないかと考えられます。
Endメソッドが発動せず、Escキーでマクロの実行が終了しないときは、次の方法3を見てください。
方法3.処理を強制終了できないときの対応方法
もし、処理が重すぎてEscキーが効かなかったり、Endメソッドが発動しなかったりして強制終了できない場合は、最終手段としてタスクマネージャーでマクロの実行を終了させます。
タスクマネージャーを起動させるには、「Ctrl」 + 「Alt」 + 「Delete」を同時押しでタスクマネージャーを選択できる画面を立ち上げます。
表示される画面で「タスクマネージャー」を選択してタスクマネージャーを起動します。
タスクマネージャーの画面で「Excel」を選択し「タスクの終了」を押すと、実行中のマクロが強制終了すると同時にエクセルも終了します。
まとめ
今回はVBAの実行中の処理を強制終了させる方法についてお伝えしました。
VBA処理を強制終了させるには以下の3つの方法があります。
- ボタンで強制終了させる方法
- Endメソッドを使った強制終了方法
- 処理を強制終了できないときの対応方法
ボタンで強制終了させる方法は以下のとおり。
VBAの強制終了ボタン:Windows
- Ctrl + Pause(またはBreak)
- Esc
VBAの強制終了ボタン:Mac
- command + .(ピリオド)
- command + control + Esc
- Esc(2回押し)
Endステートメントを使う方法は、あらかじめEndステートメントをコード内に組み込んで、ある条件になったら処理を強制的に終了させる、という使い方をします。
Endステートメントの構文は、処理を終了させたい部分に「End」と記述するだけです。
処理を強制終了できないときの対応方法は、タスクマネージャーを「Ctrl」 + 「Alt」 + 「Delete」を同時押しで起動し、実行中のエクセルを終了させます。
プログラミングでは無限ループや高負荷の処理になってしまうことが多々ありますので、今回のVBAを強制終了させる方法がお役に立てば幸いです☆
コメント