VBAで自動化 VBA一覧 エラー対策

【VBA】Descriptionプロパティとは

Excel VBAのDescriptionプロパティは、エラーオブジェクト(Errオブジェクト)に関連付けられたエラーメッセージを取得するために使用されます。プログラム中でエラーが発生した場合、このプロパティを利用することで、エラーの原因を特定しやすくなります。

Descriptionプロパティの基本的な使い方、注意点について解説します。

Descriptionプロパティの基本

Descriptionプロパティは、エラーオブジェクトErrのプロパティの1つで、エラーが発生した際にエラーメッセージを提供します。

【基本構文】

Err.Description


基本的な使用例

ゼロ除算によるエラーが発生した際にDescriptionプロパティを使用してエラーメッセージを表示します。

Sub ExampleDescription()

On Error GoTo ErrorHandler ' エラーハンドリングを有効にする

Dim x As Integer
x = 10 / 0 ' ゼロ除算のエラーを発生させる

Exit Sub

ErrorHandler:

MsgBox "エラー番号: " & Err.Number & vbCrLf & "エラー内容: " & Err.Description
Err.Clear ' エラー情報をクリア

End Sub

実行結果:
エラー番号11(ゼロ除算)のエラーメッセージ「0で除算しました。」が表示されます。

Descriptionプロパティの主な用途

エラー内容をログに記録

エラー内容をログとして記録することで、後で問題の原因を追跡することができます。

Sub LogError()

On Error GoTo ErrorHandler

Dim x As Integer
x = 10 / 0 ' エラーを発生させる

Exit Sub

ErrorHandler:

Dim errorMessage As String
errorMessage = "エラー番号: " & Err.Number & vbCrLf & _

"エラー内容: " & Err.Description & vbCrLf & _
"発生日時: " & Now

' ログファイルに書き込む(例: "error_log.txt")
Open "C:\error_log.txt" For Append As #1
Print #1, errorMessage
Close #1

MsgBox "エラーが記録されました。"
Err.Clear

End Sub

ユーザーフレンドリーなメッセージの表示

発生したエラーの詳細をユーザーに分かりやすく伝えることができます。

Sub FriendlyErrorMessage()

On Error GoTo ErrorHandler

Dim x As Integer
x = 10 / 0 ' エラーを発生させる

Exit Sub

ErrorHandler:

MsgBox "操作中にエラーが発生しました。" & vbCrLf & _

"詳細: " & Err.Description, vbCritical, "エラー"

Err.Clear

End Sub

エラー内容を条件分岐に使用

エラーの内容によって異なる処理を行うことができます。

Sub ConditionalErrorHandling()

On Error GoTo ErrorHandler

Dim x As Integer
x = 10 / 0 ' エラーを発生させる

Exit Sub

ErrorHandler:

If Err.Description = "Division by zero" Then

MsgBox "ゼロ除算エラーが発生しました。修正してください。"

Else

MsgBox "他のエラーが発生しました。内容: " & Err.Description

End If
Err.Clear

End Sub

複数エラーの記録

エラーが複数発生する可能性がある場合に、それらをリストとして収集します。

Sub CollectMultipleErrors()

Dim errorList As String
errorList = ""

On Error Resume Next ' エラーを無視して次の処理に進む

' エラーが発生する可能性のある操作
Dim x As Integer
x = 10 / 0
If Err.Number <> 0 Then

errorList = errorList & "エラー番号: " & Err.Number & " - " & Err.Description & vbCrLf
Err.Clear

End If

Dim y As Integer
y = 5 / 0
If Err.Number <> 0 Then

errorList = errorList & "エラー番号: " & Err.Number & " - " & Err.Description & vbCrLf
Err.Clear

End If

' 結果を表示
If errorList <> "" Then

MsgBox "発生したエラー:" & vbCrLf & errorList

Else

MsgBox "エラーは発生しませんでした。"

End If

End Sub

注意点

  1. Err.Clearの使用:
    • Err.Clearを使用してエラー情報をリセットしないと、後続のコードが影響を受ける場合があります。
  2. ユーザーへのエラーメッセージ表示:
    • Err.Descriptionの内容は技術的なエラー情報が含まれる場合があります。必要に応じて、ユーザーに分かりやすいメッセージを表示する工夫が必要です。
  3. 予期しないエラーの処理:
    • 予期しないエラーが発生した場合に備えて、汎用的なエラー処理を実装しておくことを推奨します。

まとめ

Excel VBAのDescriptionプロパティは、エラー発生時の詳細な情報を取得し、エラー処理を効果的に行うためのツールです。エラーの記録やユーザーへの通知、条件分岐に活用することで、プログラムの堅牢性とユーザビリティを向上させることができます。

【VBA】エラーを無視して終了する方法:エラーハンドリング

-VBAで自動化, VBA一覧, エラー対策