概要

Err.Numberプロパティは、Excel VBAで発生したエラーの番号を取得するためのプロパティです。VBAプログラム中でエラーが発生した際に、そのエラーを特定し、適切な対処を行うために使用されます。Err.Numberは、エラーハンドリングを実装する際に非常に重要な要素で、特定のエラー番号に基づいてエラー処理の流れを制御することが可能です。

構文

Err.Number

説明

Err.Numberプロパティは、VBAで実行時エラーが発生したときに、そのエラーの番号を返します。この番号を使用して、エラーの種類を特定し、エラーメッセージの表示や適切な修正手順を提供することができます。Err.Numberはエラーハンドリングの一環として、On Errorステートメントとともに使われ、発生したエラーに応じた処理を行うための指標となります。

  • エラーの識別

    Err.Numberによって取得できるエラー番号は、標準的なVBAのエラー番号のほか、ユーザー定義のエラー番号も含まれます。

  • エラーハンドリングの流れ

    Err.Numberを活用することで、特定のエラーに対して異なる処理を行うエラーハンドリングの実装が可能です。

  • エラーのリセット

    エラー処理が完了したら、Err.Clearメソッドでエラー情報をクリアしておくことが重要です。

使用例

基本的なエラー処理の例

Sub BasicErrorHandling()
    On Error GoTo ErrorHandler  ' エラーハンドリングの開始
    Dim result As Double

    result = 10 / 0  ' ゼロ除算エラーを発生させる

    Exit Sub  ' 正常終了

ErrorHandler:
    MsgBox "エラー番号: " & Err.Number & vbCrLf & "エラーメッセージ: " & Err.Description  ' エラー番号とメッセージを表示

    Err.Clear  ' エラー情報をクリア
End Sub

特定のエラー番号に応じた処理

Sub SpecificErrorHandling()
    On Error GoTo ErrorHandler
    Dim fileNumber As Integer

    fileNumber = FreeFile
    Open "C:\nonexistentfile.txt" For Input As #fileNumber  ' 存在しないファイルを開く

    Exit Sub

ErrorHandler:
    Select Case Err.Number
        Case 53  ' ファイルが見つからないエラー
            MsgBox "ファイルが見つかりません。パスを確認してください。"
        Case Else
            MsgBox "予期しないエラーが発生しました。エラー番号: " & Err.Number
    End Select
    Err.Clear
End Sub

ユーザー定義エラーの処理

Sub UserDefinedError()
    On Error GoTo ErrorHandler
    Dim userAge As Integer
    userAge = -5  ' 不正な年齢を代入

    If userAge < 0 Then
        Err.Raise Number:=9999, Description:="年齢は0以上でなければなりません。"  ' ユーザー定義のエラーを発生させる
    End If

    Exit Sub
    
ErrorHandler:
    If Err.Number = 9999 Then
        MsgBox "ユーザー定義エラー: " & Err.Description
    Else
        MsgBox "エラーが発生しました。エラー番号: " & Err.Number
    End If
    Err.Clear
End Sub

エラーハンドリングでのリソース解放

Sub ErrorHandlingWithCleanup()
    On Error GoTo ErrorHandler
    Dim fileNumber As Integer
    fileNumber = FreeFile

    Open "C:\data.txt" For Output As #fileNumber  ' ファイルを開く
    ' 何らかの処理
    Close #fileNumber  ' ファイルを閉じる
    Exit Sub

ErrorHandler:
    If Err.Number <> 0 Then
        MsgBox "エラーが発生しました。エラー番号: " & Err.Number
    End If
    On Error Resume Next
    Close #fileNumber  ' エラーが発生した場合でもファイルを閉じる
    Err.Clear
End Sub

備考

  • Err.Numberのリセット

    エラーハンドリングが終了したら、Err.Clearを使用してエラー情報をリセットすることが重要です。これにより、後続の処理に影響を与えないようにします。

  • エラーハンドリングの強化

    Err.Numberを活用することで、発生したエラーごとに異なる処理を行えるため、ユーザーフレンドリーなエラーハンドリングが可能になります。

  • On Error Resume Nextの使用

    特定のエラーを無視したい場合は、On Error Resume Nextを使用して処理を続行することもできます。ただし、これを多用するとエラーが見逃される可能性があるため、慎重に使用することが望ましいです。

Err.Numberプロパティは、VBAでのエラーハンドリングをより効果的にするための重要な要素です。適切に使用することで、エラーに対して柔軟かつ正確な対応が可能となり、プログラムの信頼性とユーザーエクスペリエンスを向上させることができます。