【マクロVBA】実行中のプログラムを途中で終了する!設定の条件・エラー発生でExit Subで止める

ソースコード

今回は、設定した条件になったときにプログラムを終わらせる・実行中のプロシージャを停止させる方法について紹介します。

IFなどの条件分岐をしている場合や、On Errorでエラーになった場合の処理をしている場合などには
今回紹介する方法と相性がよく、指定した条件になったらプログラムを終了なんてこともできます。

見本の事例も紹介していますので是非参考にしてみてください。

それではみていきましょう。




⬛︎忙しい人向けのコピぺ用プログラム

・条件に当てはまる場合はプログラムを終了させる

Sub 条件の場合()

If プログラムをとめる条件 Then
MsgBox "プログラムを終了します"
Exit Sub
End If

'ここに処理プログラム
End Sub

・エラーが発生した場合はプログラムを終了させる

Sub エラーの場合()

On Error GoTo Error1
'ここに処理プログラム
Exit Sub

Error1:
MsgBox "プログラムを終了します"

End Sub

⬛︎構文の説明

Exit Sub

これだけです、
「Exit Sub」を実行した時点でプログラムは終了します。

⬛︎Exit Subの仕組みと特徴

構文を見てもらったらわかる通り「Exit Sub」のみで、実行中のプログラムを終えることができます。
通常、プログラムを終了させるのは「End Sub」ですよね。

しかし「End Sub」はプログラムの最終行になければいけません。
それでも条件によっては途中で終わらせたい場合がありますよね。

そこで使用するのが「Exit Sub」になります。
Exit Sub」は最終行でなくても機能し、プログラムの実行を終わらせるとこができます

機能自体は「End Sub」と同様なので、条件分岐やGotoと合わせて使用することが多いです。
では事例をみていきましょう。

⬛︎事例①:If Thenと合わせて、条件の元プログラムを終了する

では一つ目の事例です。
下図のシートをご覧ください。

B3に入力してある「数値①」にD3に入力してある「数値②」で割った値を
「F3」に出力しています。

簡単なプログラムですが、このようになっています。

Sub 数値①から数値②を除算()
Cells(3, 6) = Cells(3, 2) / Cells(3, 4)
End Sub

では実行してみましょう。
結果はこのようになりました。

計算出来ていますね。
では、数値②を空白にして実行してみましょう。

するとこのような画面が出てきます。

エラーが出ました。このエラーは文字通り「0で割ったことが原因で出るエラーです。
このエラー画面はVBAに慣れている人は見慣れているのでうまく対処できますが、
VBAを触ったことがない人がこの画面を見ると戸惑ってしまいます。

「デバッグ」を押すと出てくるプログラムに訳がわからなくわからなったりしたら
対応出来なくなるリスクを踏まえると、みんなに優しいプログラムとは言えませんね。

そこで「数値①」と「数値②」が空白だった場合、「数値①、②が空白です」というメッセージとともにプログラムを終了する方法を見ていきましょう。

使用するのは「If Then」になります。
使用方法については下記記事でまとめてますのでご覧ください。

では見本のプログラムをみていきましょう。

Sub 数値①から数値②を除算()

If Cells(3, 2) = "" Or Cells(3, 4) = "" Then
MsgBox "数値①、②が空白です"
Exit Sub
End If

Cells(3, 6) = Cells(3, 2) / Cells(3, 4)
End Sub

では「B3」と「D3」に数値が入ってない場合
で実行してみたいと思います。
するとこのようになりました。

「数値①、②が空白です」というメッセージと共に
計算をせずにプログラムが終了しています。

つまりIfの条件に当てはまり、メッセージボックスを表示させた後、
「Exit Sub」でプログラムを終了させたことになります。

これで、ある条件に該当した場合はプログラムを止めることができますね。

⬛︎事例②:エラー発生時にプログラムを終了させる

次にエラーが発生した際にプログラムを終了させる事例をみていきましょう。
エラーを検出する方法は「On Error」になります。

「On Error」を詳しい使用方法は下記記事をご覧ください。

【マクロVBAのエラー対策】エラーが発生したら指定行まで移動!エラーに負けないプログラムの作り方 ► 独学エクセル塾 (dokugakuexcel.com)

こちらは先に見本のプログラムを見てみましょう。

On Error Goto 任意ラベル
  ・
  ・
  ・
通常プログラム
  ・
  ・
  ・
Exit Sub

任意ラベル

エラー時の処理

End Sub

このようになります。
「On Error」の後にある「Goto 任意ラベル」によって
エラーが起きた際は「任意ラベル」へ飛び、「End Sub」で終了します。

対してエラーが起きない通常の場合は「Exit Sub」で終わるようになります。

では先程の見本をご覧ください。
今回も空白の場合は「数値①、②が空白です」というメッセージを出したいと思います。

プログラムはこのようになります。

Sub 数値①から数値②を除算2()

On Error GoTo Error1
Cells(3, 6) = Cells(3, 2) / Cells(3, 4)
Exit Sub

Error1:
MsgBox "数値①、②が空白です"
End Sub

それでは実行してみましょう。

通常の場合はこちら、、、

狙い通り計算出来ています。

対して数値が空白の場合、、、

「数値①、②が空白です」が表示され、プログラムを終えてくれました。
これでエラーが起きた際のプログラム停止が可能になります。

⬛︎公式

わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟

Exit ステートメント (VBA) | Microsoft Learn

⬛︎まとめ

いかがだったでしょうか。
「End Sub」と違い「Exit Sub」はどこにでも配置でき、
Ifなどといった条件分岐や、「On Error」といったエラー時の
処置と相性がいいです。

複数人が触るシステムなどには入力し忘れをメッセージで出したりなど
活用法は様々です。

是非活用してみてください。

それでは次回の記事でお会いしましょう。

コメント