In Excel VBA, "End
" is a keyword that properly concludes blocks such as Sub
, Function
, and If
statements, while also serving as a special command that forcibly terminates VBA execution when used on its own.
Excel VBAを学習する際、「End
」の使い方や種類は意外と奥が深いものです。単にプロシージャの終了を示すだけでなく、制御構文やプログラムの強制終了など、さまざまなシーンで利用されます。
「End
」ステートメントは、主にVBAの構文を終了させるために用いられます。たとえば、プロシージャ(Sub
やFunction
)やIf
文、Select
文などを正しく閉じるために使われるキーワードです。文法的に正しいVBAコードを書くためには欠かせない要素で、以下のような使い分けがあります。
End Sub
、End Function
、End If
などEnd
初心者の方は、どこにどの「End
」が対応しているのかを理解するだけでも、VBAのコードを読みやすく・書きやすくなります。一方、中級者以上の方は、単独の End
が強制終了の動作をすることを踏まえ、デバッグやエラー制御と絡めて運用する場面もあるでしょう。
ここでは、VBAで使用される代表的な「End
」に関するキーワードを、それぞれの特徴と共に解説します。
Sub ~ End Sub
のように、Subプロシージャの開始と終了を示すキーワードです。VBA
Sub SampleProcedure()
' ここに処理を書く
End Sub
Sub
ブロックを正しく閉じなければコンパイルエラーとなるため、必ず対応する End Sub
が必要です。Exit Sub
を途中で使用する場合は、処理がそこで抜けて終了しますが、Exit Sub
で終了しても最後の行に End Sub
は必ず存在しなければなりません。Function ~ End Function
のように、Functionプロシージャの開始と終了を示すキーワードです。VBA
Function SumValue(a As Long, b As Long) As Long
SumValue = a + b
End Function
End Function
で終了させます。Exit Function
を使用することができますが、やはり対応する End Function
は必須です。VBA
' クラスモジュール内の例
Private pValue As Long
Public Property Get Value() As Long
Value = pValue
End Property
Public Property Let Value(ByVal newValue As Long)
pValue = newValue
End Property
Property Get
、Property Let
、Property Set
などのプロパティアクセサの終了にそれぞれ End Property
が必要です。VBA
If x > 10 Then
MsgBox "xは10より大きいです"
ElseIf x = 10 Then
MsgBox "xは10と等しいです"
Else
MsgBox "xは10より小さいです"
End If
End If
は不要(例:If x > 10 Then MsgBox "..."
)。End If
が必要です。VBA
Select Case x
Case 1
MsgBox "値は1です"
Case 2
MsgBox "値は2です"
Case Else
MsgBox "その他の値です"
End Select
Case ~
~ End Select
までがワンセットになるため、必ず対応する End Select
が必要になります。VBA
With Range("A1")
.Value = "Hello"
.Font.Bold = True
End With
With ~ End With
までの間で、.
を利用してオブジェクトを簡易的に扱うことができます。VBA
Type Student
Name As String
Score As Long
End Type
Type
よりクラスを使うほうが多いです)。Enum
(列挙型)の定義を終了させるステートメントです。VBA
Enum ColorType
Red = 1
Green = 2
Blue = 3
End Enum
Type
同様、きちんと End Enum
を用いてブロックを閉じる必要があります。VBA
Sub ForceEndExample()
MsgBox "この後に強制終了します"
End ' この行でVBAの実行が強制的に終了する
MsgBox "ここは実行されません"
End Sub
Exit Sub
/ Exit Function
などを使う方がベターです。End
と Exit
の違い「End
」キーワードとよく混同されるのが、途中で処理を抜けるための「Exit Sub
」「Exit Function
」などの Exit
ステートメント です。主な違いは次のとおりです。
End
Exit Sub
/ Exit Function
/ Exit Property
基本的には「End
を使うのは最終手段」「通常はExit
の方を使う」という考え方でOKです。
Stop
と End
の違いVBAのコードを記述していると、Stop
と呼ばれるステートメントを見かけることがあります。これと「End
」との動作の違いも把握しておくと便利です。
Stop
End
デバッグ目的で一時的に実行を止めたいのであれば、Stop
を使うのが適切です。一方、強引にでもすべての実行を終了させたい場合は、End
を使うことになりますが、やはり多用は避けるべきです。
If ... End If
や Sub ... End Sub
など、開いたら必ず正しく閉じるルールを守りましょう。End
は極力使わないOn Error ~
文などを適切に利用して処理を終了させましょう。End
の代わりにしっかり解放用コードを呼び出して Exit Sub
または Exit Function
で終了させるようにしましょう。End
」を含むすべてのブロックで、開始行・終了行にコメントを入れておくなど、可読性を高める工夫が重要です。If
文やSelect
文が複数ネストしている場合、意図を他の開発者にも分かりやすく伝えるよう意識しましょう。以上、Excel VBAの「End
」に関連するステートメントを一通り解説しました。「End
」は多くの構文のブロック終了を担う大切な要素である一方、単独の End
は強制終了機能として特殊な動きをします。初心者の方は「対応するブロックを正しく閉じる」点をまず意識するところから始め、中級者以上の方は「End
はなるべく使わず、Exit Sub
/ Exit Function
など他の手法を駆使してエラー制御を行う」ことを心がけましょう。
VBAは柔軟性が高い分だけ、エラーや不安定な動作を招きやすい側面も持ち合わせています。「End
」ステートメントの正しい理解と使い方を押さえておくことで、プログラムをより安全かつ効率的に仕上げることができるでしょう。