VBA Exit Sub | 条件が満たされない場合は、VBAサブプロシージャを終了します

ExcelVBA終了サブプロシージャ

Exit Subステートメントは、VBAコードの定義された行よりも早くサブプロシージャを終了します。ただし、サブプロシージャを終了するには、何らかの論理テストを適用する必要があります。

これを簡単な言葉で組み立てましょう。

 Sub MacroName() '...'ここにいくつかのコード '... Exit Sub'以下のコード行を実行せずにSubを終了します '...'このコードは無視されます '... End Sub 

このVBAExit Sub Excelテンプレートはここからダウンロードできます– VBA Exit SubExcelテンプレート

例1

より良い例については、以下のコードを見てください。

コード:

 Sub Exit_Example1()Dim k As Long For k = 1 To 10 Cells(k、1).Value = k Next k End Sub 

上記のコードは、セルA1からA10に1から10までのシリアル番号を挿入します。

ここで、5つのシリアル番号のみを挿入し、変数「k」の値が6になったらすぐに、サブを終了します。

このために、IF k = 6としてExcelに論理テストを追加してからSubを終了する必要があります。

コード:

 Sub Exit_Example1()Dim k As Long For k = 1 To 10 If k = 6 Then Exit Sub'k値が6になるとすぐに、すべてのコードを無視してCells(k、1)を終了します。Value= k Next k Endサブ 

次に、コードを1行ずつ実行します。F8キーを押して、手順を開始します。

現在、k値はゼロです。

k値を1に変更するには、F8キーをもう一度押します。

したがって、k値は1であり、コードは実行を継続し、セルA1に1を挿入します。このように、kの値が6になるまでループを実行し続けます。

これで、kの値は6になり、コード行は論理テストを実行してサブプロシージャを終了しようとしています。F8キーをもう一度押すと、サブプロシージャ全体がそのまま終了します。

ご覧のとおり、「ExitSub」という単語が強調表示されています。F8キーを押すと、「EndSub」という単語に移動せずにサブプロシージャを終了します。

例2–エラー時にサブプロシージャを終了する

エラー値を取得したら、サブプロシージャを終了することもできます。たとえば、数値1を数値2から除算する以下のデータについて考えてみます。

以下は、2つの数値の除算を取得するためのコードです。

コード:

 Sub Exit_Example2()Dim k As Long For k = 2 To 9 Cells(k、3).Value = Cells(k、1).Value / Cells(k、2).Value Next k End Sub 

ご存知のように、数値をゼロで割ることはできません。したがって、これを実行しようとすると、実行時エラー '11':ゼロ除算としてエラーが発生します。

エラーが発生したらすぐにこれを回避するために、マクロを使用してサブプロシージャをすぐに終了します。以下のコードはそのようなケースの1つです。

コード:

 Sub Exit_Example2()Dim k As Long For k = 2 To 9 On Error GoTo ErrorHandler Cells(k、3).Value = Cells(k、1).Value / Cells(k、2).Value Next k ErrorHandler:Exit Subエンドサブ 

上記の例では、「On ErrorGotoErrorHandler」というステートメントについて説明しました。ここで、ErrorHandlerという単語は私が割り当てたラベルです。あなたがコードの下部に見ることができるならば、私はラベルを次のように述べました

ErrorHandler:Subを終了します 

したがって、コードでエラーが発生するとすぐに、コードをプッシュしてラベルにジャンプし、ラベルには「Exit Sub」ステートメントがあるため、サブプロシージャを終了します。

Now I will run the code, it will calculate the division until it finds an error.

As you can see in the cell C7 it has encountered an error as “Division by Zero” so it has exit the subprocedure. Without informing the user exiting the subprocedure is always a dangerous thing. To inform the user about the error we can include one small message box.

Code:

 Sub Exit_Example2() Dim k As Long For k = 2 To 9 On Error GoTo ErrorHandler Cells(k, 3).Value = Cells(k, 1).Value / Cells(k, 2).Value Next k ErrorHandler: MsgBox "Error has Occured and the error is:" & vbNewLine & Err.Description Exit Sub End Sub 

The above code will show the error message then exit the subprocedure. While running code if an error occurs it will show the message box in VBA like below.

This is more of a reliable way of exiting the Sub Procedure.