Excel VBA エラーハンドリングの完全ガイド

こんにちは!大阪市を拠点に活動している『縁紡ぐ』の稲垣です。
SWELLを使ったホームページ制作や、Excel、ACCESS、RPAなどのシステム開発を行っています。
また、Excel、Word、Outlookの研修や、情報セキュリティ研修も行っています。身近なITの相談相手になりたいと思っています。
お気軽にお問い合わせください。
Excel VBA エラーハンドリングの完全ガイド
エラーハンドリングの重要性
エラーハンドリングは、VBAプログラムの安定性を向上させ、予期しない問題を円滑に処理するために欠かせません。特に業務効率化を目指す方にとって、エラー処理が適切でないと、プログラムが止まってしまい、業務が滞る原因となります。
VBAにおけるエラーハンドリングの基本
VBAでは、エラーハンドリングを行うために以下の構文を使用します。
Sub SampleProcedure()
On Error GoTo ErrorHandler
' コードをここに記述
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description
End Sub
エラーを発生させてみる
割り算でゼロで割ろうとするとエラーになるので、エラーを実際発生させて、メッセージボックスが表示されるかやってみます。
Sub SampleProcedure()
On Error GoTo ErrorHandler
Dim num1 As Double
Dim num2 As Double
Dim result As Double
num1 = 10
num2 = 0
' ゼロ除算を行うためエラーとなる
result = num1 / num2
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description
End Sub

エラーが発生すると、『ErrorHandler』に処理が移動する
階層型開発におけるエラーの伝播方法
階層型開発では、モジュール間でのエラー伝播が重要なポイントです。エラーを適切に伝播させることで、プログラム全体の安定性を高めることができます。
エラーの伝播の基本概念
エラーが発生した場合、エラーをどのように上位のモジュールに伝えるかが重要です。通常、下位モジュールで発生したエラーは、上位モジュールに伝播される必要があります。
On Error GoToを使用したエラー伝播
以下のコードは、下位モジュールで発生したエラーを上位モジュールに伝播させる方法を示しています。
Sub MainProcedure()
On Error GoTo ErrorHandler
Call SubProcedure
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description
End Sub
Sub SubProcedure()
On Error GoTo ErrorHandler
' エラーを発生させるコード
Err.Raise 9999 ' 自作エラーを発生
Exit Sub
ErrorHandler:
' エラーを上位に伝播
Err.Raise Err.Number ' 上位モジュールにエラーを伝播
End Sub

自作エラー
自作エラーを使うことで、特定の条件やビジネスロジックに基づいたエラー処理が可能になります。たとえば、ユーザーが必須項目を入力しなかった場合や、特定の条件を満たさない場合にエラーを発生させることができます。これにより、プログラムの流れを制御し、ユーザーに適切なフィードバックを提供できます。
Err.Raise
の使用法
Err.Raise
は、VBAで自作エラーを発生させるためのメソッドです。このメソッドを使うことで、特定のエラー番号やメッセージを指定してエラーを発生させることができます。
Err.Raise(Number, [ [Source], [Description], [HelpFile], [HelpContext] ])
Number: 発生させたいエラー番号(整数)
Source: エラーの発生元(オプション)
Description: エラーの説明(オプション)
HelpFile: ヘルプファイル名(オプション)
HelpContext: ヘルプコンテキスト(オプション)
Sub SampleProcedure()
On Error GoTo ErrorHandler
Dim inputValue As String
inputValue = "" ' 空の値を設定(必須項目)
' 必須項目のチェック
If inputValue = "" Then
Err.Raise 1001, "SampleProcedure", "必須項目が未入力です。"
End If
' 他の処理をここに記述
Exit Sub
ErrorHandler:
MsgBox "エラー番号: " & Err.Number & vbCrLf & _
"エラーが発生しました: " & Err.Description
End Sub

エラー番号を表示: エラーメッセージにエラー番号を加えることで、作り手がどこで問題があったのかを追いやすくします。これにより、デバッグが容易になります。
意味のあるエラー番号を設定: 自作エラーには、意味のある番号を設定することが重要です。エラー番号は、他のエラー番号と衝突しないように管理すること。1000以上の番号を使用することが多いです。
ユーザーへのフィードバック: エラーメッセージは具体的で理解しやすいものにして、ユーザーが何をすべきかをわかるようにしましょう。
自作エラーの大切なこと
自作エラーを適切に使用することで、エラーが追いやすく不意なプログラムの中断を防止することができます。Err.Raise
を使ってエラーを発生させる際は、エラー番号や説明をわかりやすくしておくことが重要です。このようにすることで、エラーが発生した際に迅速に対応できるようになります。
まとめ
エラーハンドリングは、VBAプログラムの信頼性を向上させ、業務の効率化を図るための重要な要素です。基本的な構文を理解し、実践することで、より安定したプログラムを作成できます。ぜひ、活用してくださいね!

稲垣
- Excel、ACCESSでのシステム開発が得意
- ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
- 自家焙煎するほどのコーヒー好き
- 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
- 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント