VBAのエラー処理のサンプルです.

目次

  1. エラーのトラップ
  2. 処理の再開
  3. エラー番号ごとの条件分岐
  4. 参考文献

エラーのトラップ

エラーが生じた場合に処理を分岐させるにはGoToで指定したラベルまでジャンプさせます.
ジャンプ先のラベルに到達する直前では,Exit Subによって通常の処理のフローを終了させるようにしてください.
そうでなければ,そのままエラー時の処理も実行してしまいます.

なお,GoToのあとに0を指定すると,エラートラップが解除されます.

On Error GoTo ラベル
エラートラップする処理

On Error GoTo 0
通常の処理
Exit Sub

ラベル:
エラー時の処理

処理の再開

エラー発生後に処理を再開するにはResumeを使います.

On Error Resume ラベル
処理

とすると,ラベルにジャンプをして処理を再開します.
特に,ラベルがNextの場合,発生した次の行から処理を再開します.
ラベルが0の場合(または省略された場合),同じ行で処理を再開します.

エラー番号ごとの条件分岐

エラーが発生した場合ErrオブジェクトのNumberプロパティが0からエラー番号に変更されます.
この番号を利用してエラーメッセージを分岐し,ユーザーに問題を伝えることができます.

Select Case Err.Number
Case 0
MsgBox "正常に処理しました."
Case エラー番号
MsgBox "(エラー番号に該当する)エラーが生じました."
Case Else
MsgBox "何らかのエラーが生じました."
End Select

複数のシートに処理を施す場合などには,シートごとで生じたエラーを都度クリアすべきでしょう.これはErr.Clearで行えます.

参考文献

スピル関数やPower Query,コメントへのリプライなどの新しい機能が紹介されているほか,他のプログラミング言語で処理することの多いファイル操作や読み書きもマクロでパッケージ化して第三者に渡したい場合に助けとなる逆引き辞典です.

  • 大村あつし・古川順平 (2021)「Excel VBA コードレシピ集」技術評論社.