【VBA】VBAでも例外処理は可能?On Errorステートメントで安全なコードを書く方法

目次

経緯

Excel VBAでマクロを組んでいると、予期しないエラーが発生することがあります。
C#などで使える try-catch のような例外処理構文が、VBAにもあるのか気になり、今回調べてみました。

結論から言うと、VBAでは On Error ステートメントを使うことで、例外処理(エラーハンドリング)を行うことが可能です。


使用する構文:On Error GoTo ~ 構文

VBAにおけるエラー処理は、主に On Error GoTo ラベル名 という構文で行います。
これは、エラーが発生した場合にジャンプ先(エラーハンドラ)を指定するという動作です。


実装例:基本的な例外処理コード

以下に、On Error を使った基本的なエラーハンドリングのサンプルコードを示します。

Sub 例外処理()

    On Error GoTo ErrorHandler ' エラー時にジャンプする場所を指定

    ' ここでエラーが起きる可能性のある処理
    If ans = vbYes Then
        MsgBox "エラーは発生していません。"
    End If

    Exit Sub ' 正常に終了する場合はここで抜ける

ErrorHandler: ' エラー処理部
    MsgBox "エラーが発生しました。プログラムを終了します。"
    Set objOutlook = Nothing ' オブジェクトが存在している場合は解放
    Exit Sub

End Sub

このコードの解説

  • On Error GoTo ErrorHandler
     → エラーが発生した際に、ErrorHandler: というラベルにジャンプします
  • Exit Sub をエラーハンドラーの直前に入れることで、正常処理のときはエラー処理に入らないようにします
  • ErrorHandler: の下では、エラーメッセージを表示したり、後処理を記述したりします
  • 最後に Exit Sub を再度書くことで、エラー処理後にそれ以上の実行を防止します

実務での応用例

  • ファイルやオブジェクトが存在しない場合の処理
  • セル範囲外アクセスなどによる Run-time error の回避
  • Outlook、Word など外部アプリとの連携処理におけるエラー処理
  • 入力値が不正な場合の事前チェックと安全停止処理

注意点

  • On Error Resume Nextエラーを無視して次の処理に進む構文ですが、原因がわかりにくくなるため乱用は避けましょう
  • Err.NumberErr.Description を使えば、具体的なエラー内容の取得も可能です
  • すべての Sub / Function に例外処理を書くことで、より堅牢なマクロになります

まとめ

VBAでも On Error ステートメントを使うことで、エラー処理が可能です
try-catch 構文のように明確にブロック分けはできませんが、
On Error GoTo によって、安全かつ予測可能な動作を作ることができます。

実務で使用するマクロでは、例外処理は必須の設計要素ですので、ぜひ活用してみてください。

最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次