【入門編】エラーハンドリングの基本形:On Error GoTo 0とResumeの正しい理解 – Excel VBA解析バイブル

スポンサーリンク

VBAの「暴走」を止める。エラーハンドリングという名の「安全装置」を実装しよう

マクロの記録から脱却し、自力でコードを書き始めた皆さんが最初にぶつかる壁。それは、「予期せぬエラーでマクロが突然停止し、Excelがデバッグモードで凍りつく」という恐怖体験ではないでしょうか。

初心者のうちは「動けばいい」と考えがちですが、プロのエンジニアは違います。私たちは「エラーが起きないコード」ではなく、「エラーが起きても正しく後始末をして終了できるコード」を書いています。

今日は、VBAにおけるエラーハンドリングの「黄金律」を伝授します。これさえ覚えれば、あなたのマクロは一気に「業務に耐えうる堅牢なツール」へと進化します。

なぜ「エラーハンドリング」が必要なのか?

Excel VBAは、ユーザーの操作ミスや外部ファイルの消失など、予期せぬ事態に直面すると、容赦なく「デバッグ」画面を突きつけてきます。

もし、あなたが作ったマクロが、誰かのPCで突然止まり、「終了」や「デバッグ」のボタンを迫られたらどうでしょう。その人はパニックになり、二度とあなたのマクロを使ってくれないかもしれません。

エラーハンドリングとは、「不測の事態を検知し、責任を持って後始末をして、優雅に退出する」ための作法なのです。

これがエラーハンドリングの「基本テンプレート」だ

まずは、最も汎用的な「定型パターン」を頭に叩き込んでください。

Sub Sample_ErrorHandling()
‘ 1. エラー監視の開始(ここからエラーが発生したらErrorHandlerへ飛べ)
On Error GoTo ErrorHandler

‘ — 本来の処理を書く場所 —
Debug.Print 1 / 0 ‘ わざと0除算エラーを起こしてみる
‘ —————————-

‘ 正常終了した場合は、ここでルーチンを抜ける(重要!)
Exit Sub

ErrorHandler:
‘ 2. エラー発生時の処理
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“内容: ” & Err.Description, vbCritical

‘ 3. ここで後始末(画面更新の再開など)を行う
Application.ScreenUpdating = True

‘ 4. 必要に応じてResumeで復帰、あるいはExit Subで終了
End Sub

このコードの「魂」を解説する

  • `On Error GoTo ErrorHandler`: これが「安全装置のスイッチ」です。これがないと、エラー発生時にVBAは強制終了します。
  • `Exit Sub`: これを書き忘れる初心者が非常に多い!正常に終わった時も `ErrorHandler` を通ってしまわないよう、ここで必ず脱出するのが鉄則です。
  • `ErrorHandler:`: ラベルと言います。エラーが起きたとき、VBAはここへ「ワープ」します。
  • `Errオブジェクト`: エラーの詳細(番号や内容)を教えてくれる神の使いです。

現場で使う「Resume」の正しい理解

エラーハンドリングを語る上で欠かせないのが `Resume` です。これは「エラーが発生した場所まで戻って、処理をやり直せ」という命令です。

1. Resume Next:エラーを「なかったこと」にする

エラーが起きた行をスキップして、次の行から再開します。

On Error Resume Next
Workbooks.Open “存在しないファイル.xlsx” ‘ ここでエラーが出るが…
On Error GoTo 0 ‘ 監視を解除(重要!)

‘ エラーを無視して次の処理へ進む

2. Resume:再試行を促す

エラーの原因を取り除いた後、再度同じ行を実行します。

ErrorHandler:
‘ もしファイルが見つからないエラーなら、ユーザーに選択させる
If Err.Number = 1004 Then
MsgBox “ファイルが見つかりません。パスを確認してください。”
Resume ‘ 再度、さっきの行を実行し直す
End If

最後に:On Error GoTo 0 の哲学

最後に最も大切なことを伝えます。`On Error GoTo 0` は「監視の強制解除」です。

`On Error Resume Next` を使った後は、必ず `On Error GoTo 0` を書いてください。これを怠ると、後続のコードで発生した重大なエラーさえも「無視」され、気づかぬうちにデータが破壊されるという最悪のバグを生みます。

「監視を開始したら、責任を持って解除する」。

この作法こそが、あなたが「マクロの記録」を卒業し、真のエンジニアへと脱皮した証です。

まとめ:ここをクリアすれば大丈夫!

1. `On Error GoTo 〇〇` でエラーの逃げ道を作る。
2. `Exit Sub` で正常ルートとエラールートを完全に分ける。
3. `On Error GoTo 0` で監視を止めることを忘れない。

エラーは「敵」ではありません。エラーは「あなたの書いたコードが、限界に達したことを教えてくれるサイン」です。そのサインを正しく拾い上げ、ユーザーに優しく伝える。それだけで、あなたのVBAライフは劇的に安定します。

さあ、恐れずにコードを書きましょう。あなたのマクロが、誰かの業務を救うその日まで。

タイトルとURLをコピーしました