エラー番号取得(Errオブジェクトの基本)
VBAでエラーが発生したとき、その原因を調べるために エラー番号(Err.Number) を取得する方法があります。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- Errオブジェクト
VBAでエラーが起きると、自動的にErrオブジェクトに情報が入ります。 - よく使うプロパティ
Err.Number→ エラー番号(0ならエラーなし)Err.Description→ エラーの説明文Err.Source→ エラーの発生元
テンプレ1:エラー番号を取得して表示
Sub ErrorNumber_Basic()
On Error GoTo ErrHandler
' 故意にゼロ除算エラーを発生させる
Dim x As Long
x = 10 / 0
Exit Sub
ErrHandler:
MsgBox "エラー番号: " & Err.Number & vbCrLf & _
"説明: " & Err.Description
End Sub
VB- ポイント:
On Error GoTo ErrHandlerでエラー時にジャンプ。Err.NumberとErr.Descriptionを表示。
テンプレ2:Resume Nextでエラー番号をチェック
Sub ErrorNumber_ResumeNext()
On Error Resume Next
' 存在しないシートを参照
Worksheets("NoSheet").Activate
If Err.Number <> 0 Then
MsgBox "エラー番号: " & Err.Number & vbCrLf & _
"説明: " & Err.Description
Err.Clear ' エラー情報をクリア
End If
On Error GoTo 0 ' 通常動作に戻す
End Sub
VB- ポイント:
Resume Nextは止まらず次へ進む。Err.Numberが0以外ならエラー発生。
テンプレ3:ログシートにエラー番号を記録
Sub ErrorNumber_Log()
On Error GoTo ErrHandler
' 故意にエラーを発生
Worksheets("NoSheet").Activate
Exit Sub
ErrHandler:
Dim ws As Worksheet: Set ws = Worksheets("ErrorLog")
Dim r As Long
r = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(r, 1).Value = Now
ws.Cells(r, 2).Value = Err.Number
ws.Cells(r, 3).Value = Err.Description
MsgBox "エラーをログに記録しました!"
End Sub
VB- ポイント:
- エラー番号と説明をシートに残す。
- 後から原因調査ができる。
テンプレ4:自分でエラー番号を発生させる(Err.Raise)
Sub ErrorNumber_Raise()
On Error GoTo ErrHandler
' 条件チェック
Dim path As String: path = "C:\no\such\file.txt"
If Dir(path) = "" Then
Err.Raise Number:=1001, Source:="FileCheck", _
Description:="ファイルが見つかりません: " & path
End If
Exit Sub
ErrHandler:
MsgBox "自作エラー番号: " & Err.Number & vbCrLf & _
"説明: " & Err.Description
End Sub
VB- ポイント:
Err.Raiseで独自のエラー番号を発生させられる。- 実務で「条件違反」を例外として扱える。
例題で練習
'例1:ゼロ除算でエラー番号を取得
'例2:存在しないシート参照でエラー番号を取得
'例3:エラー番号と説明をログシートに記録
'例4:自作エラー番号を発生させて処理
VB初心者向けポイント
- Err.Numberが0ならエラーなし
- エラー番号と説明を必ずセットで確認
- Resume Nextを使う場合は必ず判定する
- ログに残すと後から調査が楽
- Err.Raiseで独自エラーを作れる
👉 この「エラー番号取得テンプレ」を覚えておけば、Excel VBAで エラーの原因を番号で特定し、ログやメッセージで分かりやすく管理する処理 を簡単に作成できます。
