On Errorとは
VBAの「On Error」ステートメントは、VBAプログラムでランタイムエラーを管理するために使用されます。これにはいくつかの異なる形式があり、それぞれに特定の用途と注意点があります。
On Error Resume Next
このステートメントは、エラーが発生したときにプログラムがエラーを無視して次の行から実行を続けるように指示します。これにより、プログラムはランタイムエラーにもかかわらず実行を続けますが、エラーによる副作用(未初期化の変数やnullオブジェクトなど)をプログラマが管理する責任があります。これは特定の状況で役立ちますが、不適切な使用はプログラムの不安定さを引き起こす可能性があります。
On Error GoTo [Label]
この形式では、エラーが発生した場合にプログラムの制御を特定のラベルに移動させることができます。これは、エラーが発生した際に、より洗練されたエラーメッセージを表示するか、アプリケーションを適切に終了させる場合に適しています。
On Error GoTo LABEL名
LABEL名:
' エラー処理
On Error GoTo 0
このステートメントは、現在のプロシージャでエラーハンドリングを無効にします。これは、エラーハンドリングコードの開始を行番号0で指定するものではありません。プロシージャを抜ける際に自動的にエラーハンドラが無効になるため、これを指定する必要はありませんが、「On Error Resume Next」と組み合わせることで、特定のセクションでのみエラーチェックを無効にするといった使い方ができます。
On Error のサンプルコード
VBAのOn Error
ステートメントは、エラーハンドリングを行うために使われる非常に重要な機能です。以下に、VBA初心者が理解しやすいようなOn Error
の使用例を示します。
On Error Resume Nextの例
この例では、エラーが発生しても、プログラムはエラーを無視して次の行から実行を続けます。これは、特定のエラーが予想され、それを無視しても問題ない場合に有用ですが、使い方には注意が必要です。
Sub OnErrorResumeNextExample()
On Error Resume Next ' エラーを無視して次の行を実行
Dim x As Integer
x = 1 / 0 ' 0で割るとエラーが発生しますが、無視されます
MsgBox "プログラムは続行されました"
End Sub
On Error GoTo [Label]の例
この例では、エラーが発生した場合にプログラムの制御を特定のラベル(ここではErrorHandler
)に移動させます。これは、エラーが発生した際に適切なエラーメッセージを表示するか、プログラムを適切に終了させる場合に適しています。
Sub OnErrorGotoLabelExample()
On Error GoTo ErrorHandler ' エラーが発生した場合にErrorHandlerへ移動
Dim y As Integer
y = 1 / 0 ' 0で割るとエラーが発生します
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description
End Sub
On Error GoTo 0の例
この例では、On Error GoTo 0
を使用して、エラーが発生した場合にデフォルトのエラーハンドリングに戻ります。これは、一時的にエラーハンドリングを変更した後、元の状態に戻す場合に使用します。
Sub OnErrorGoto0Example()
On Error Resume Next ' 最初にエラーを無視する
Dim z As Integer
z = 1 / 0 ' このエラーは無視されます
On Error GoTo 0 ' デフォルトのエラーハンドリングに戻る
z = 1 / 0 ' このエラーは通常通り処理されます(エラーダイアログが表示される)
End Sub

エラーハンドリングは、VBAプログラムをより堅牢で信頼性の高いものにするための重要なスキルです。