VBAのErrorでエラーを発生させる方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Errorの概要

任意のエラーを発生させ、エラーハンドリングをテストする VBAの予約語

Error

概要 Error ステートメントは、VBAで任意のエラーを発生させるために使用されます。主にエラーハンドリングのテストや、特定の条件下でエラーを発生させたい場合に利用されます。

わかりやすく説明 指定したエラー番号を強制的に発生させる命令。

  • エラー番号を指定することで、特定のエラーを発生させることができる。
  • VBAのエラーハンドリングの動作を確認するために使用される。
  • Excel VBAのデバッグやカスタムエラーメッセージのテストに役立つ。

Errorを使ってエラーを発生させる

以下の例では、Error によってエラーを発生させます。

Sub TestError()
    On Error Resume Next ' エラーが発生しても続行
    Error 11 ' エラー11(ゼロ除算エラー)を発生
    If Err.Number <> 0 Then
        MsgBox "エラー発生: " & Err.Number & " - " & Err.Description
    End If
End Sub

解説:

  • Error 11 でエラー番号11(ゼロ除算エラー)を発生させる。
  • Err.Number で発生したエラーの番号を取得。
  • On Error Resume Next により、エラーが発生してもプログラムが継続。

Errorを使ったカスタムエラーハンドリング

以下の例では、Error を使ってエラーハンドリングをテストします。

Sub CustomErrorHandling()
    On Error GoTo ErrorHandler ' エラー時に ErrorHandler にジャンプ
    
    ' エラーを発生させる
    Error 53 ' ファイル未検出エラー

    Exit Sub ' 正常終了時はエラーハンドラを通らない

ErrorHandler:
    MsgBox "エラー発生: " & Err.Number & " - " & Err.Description
    Resume Next ' 次の行から実行を再開
End Sub

解説:

  • On Error GoTo ErrorHandler でエラー時にエラーハンドラへジャンプ。
  • Error 53 で「ファイル未検出エラー」を発生。
  • Resume Next で次の行から処理を継続。

Excel VBAでのErrorの活用

以下の例では、Excelのシート操作でエラーを強制発生させ、処理を確認します。

Sub TestExcelError()
    On Error Resume Next
    Dim ws As Worksheet
    
    ' 存在しないシートを選択しようとしてエラーを発生
    Set ws = ThisWorkbook.Sheets("NonExistentSheet")
    
    ' エラーを発生させる
    If ws Is Nothing Then
        Error 1004 ' Excelの実行時エラー
    End If
    
    If Err.Number <> 0 Then
        MsgBox "エラー発生: " & Err.Number & " - " & Err.Description
    End If
End Sub

解説:

  • 存在しないシートを参照しようとするとエラーが発生。
  • エラーが発生したら Error 1004 を使って強制的にエラーを発生させる。
  • 発生したエラーを MsgBox で表示。

Errorの注意事項

  • 実際に発生するエラーと同じ動作をするわけではない: Error ステートメントはエラー番号を設定するだけで、実際のエラーの詳細な情報は Err オブジェクトに依存する。
  • デバッグ目的での使用が推奨: 実際のプログラムでは Err.Raise の方が適切なケースが多い。
  • Resume や Resume Next を使って適切に処理する: エラー発生後の動作を明確にしておく。

よくある質問

Q: Error と Err.Raise の違いは?
A: Error は単にエラー番号を設定するだけで、Err.Raise は実際にエラーを発生させる。
Q: Error を使うメリットは?
A: エラーハンドリングの動作確認やテストに役立つ。
Q: Error を使うべきケースは?
A: 実際のエラーハンドリングでは Err.Raise を使い、Error はデバッグや学習用として使う。

まとめ

  • Error ステートメントは、指定したエラー番号を強制的に発生させる。
  • エラーハンドリングのテストやデバッグに役立つ。
  • Excel VBAでエラー処理の挙動を確認する際に使用できる。
  • 実際のエラーハンドリングには Err.Raise を推奨。