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.
  • 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
  • お客様にとって本当に良いことかを第一に考える人
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次