【2026年7月最新】VBAのエラー処理完全ガイド|On Error・Resume・GoToの使い方とErrオブジェクト活用法
この記事の内容
- 01VBAエラー処理の基本概念と種類
- 02On Error GoTo:エラー発生時にラベルへジャンプ
- 03On Error Resume Next:エラーを無視して次の行へ
- 04Resume・Resume Next・Resume ラベルの使い分け
- 05Errオブジェクト:Number・Description・Sourceの活用
- 06エラー番号によるSelect Case分岐
- 07On Error GoTo 0:エラー処理の無効化
- 08業務マクロでの実践エラー処理パターン
- 09よくある失敗とデバッグのコツ
- 10Claude CodeでVBAエラー処理コードを自動生成
- 11まとめ
- FAQよくある質問
「マクロを誰かに使ってもらったら、予期しないエラーで止まってしまった」「ファイルが見つからないときにマクロが途中で落ちて、データが中途半端な状態になってしまった」——VBAマクロを本格的に業務で使い始めると、エラー処理の重要性を痛感します。エラー処理は「書かなくても動くコード」を「壊れにくく、問題を特定しやすいコード」に変える必須の技術です。
この記事では、VBAのエラー処理を完全に解説します。On Error GoTo・On Error Resume Next・Resumeステートメントの使い分け・Errオブジェクトでのエラー情報取得・Select Caseによるエラー番号分岐・業務マクロでの実践パターンまで、コード例を豊富に交えて説明します。
01 ERROR BASICS VBAエラー処理の基本概念と種類 エラーが発生する3つのタイミングとそれぞれへの対処方針
VBAのエラーには3種類あります。「コンパイルエラー」「実行時エラー」「論理エラー」です。それぞれ発生するタイミング・原因・対処方法が異なります。エラー処理(On Error文)で対処できるのは主に「実行時エラー」です。
| エラーの種類 | 発生タイミング | 原因例 | エラー処理で防げるか |
|---|---|---|---|
| コンパイルエラー | マクロ実行前(コード解析時) | 変数名ミス・構文ミス・End Subの欠落 | ❌ コードの修正が必要 |
| 実行時エラー(ランタイムエラー) | マクロ実行中 | ファイル未存在・型の不一致・ゼロ除算 | ✅ On Errorで処理可能 |
| 論理エラー(バグ) | 実行中(エラーメッセージなし) | 計算式の間違い・条件分岐のバグ | ❌ テスト・デバッグで発見する |
📚 用語解説
実行時エラー(ランタイムエラー):VBAコードが実行中に発生するエラー。構文は正しいが「ファイルが見つからない」「データ型が不一致」「ゼロ除算」「シートが存在しない」など、実行してみないと分からない異常状態によって発生します。On Error文でキャッチして対処できます。発生するとエラーメッセージが表示され、マクロが停止します。
エラー処理を書く目的は大きく2つです。(1)エラーが発生した場合でもマクロを「適切にクリーンアップして終了」させること。(2)エラーの内容をユーザーに分かりやすく伝えること(またはログに記録すること)。この2つを意識してエラー処理を設計します。
発生
型不一致・ファイル未存在等
が処理をキャッチ
GoTo or Resume
ルーティン実行
メッセージ表示・ログ記録
リカバリ処理
02 ON ERROR GOTO On Error GoTo:エラー発生時にラベルへジャンプ エラー処理の基本パターン。後処理が必要な業務マクロに必須
📚 用語解説
On Error GoTo(オン・エラー・ゴートゥ):VBAのエラー処理有効化構文。「On Error GoTo ラベル名」と書くと、以降のコードで実行時エラーが発生したとき自動的に指定ラベルへジャンプします。エラー処理ルーティンをプロシージャ末尾にラベルで配置し、通常処理の末尾にはExit Subを置くのが標準パターン。On Error GoTo 0で無効化できます。
「On Error GoTo ラベル名」は、エラーが発生したときに指定したラベルの位置にジャンプする構文です。これがVBAエラー処理の最も基本的なパターンです。エラー処理ルーティンを関数の末尾にラベル(例:ErrorHandler:)として配置し、通常の処理の末尾には「Exit Sub」を入れることで、エラーがない場合はエラー処理をスキップします。
' On Error GoToの基本パターン
Sub SampleErrorHandling()
' ← ここでエラー処理を有効化
On Error GoTo ErrorHandler
' === 通常の処理 ===
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Data\report.xlsx") ' ← ここでエラーが起きる可能性
Cells(1, 1).Value = wb.Sheets(1).Cells(1, 1).Value
wb.Close False
MsgBox "処理が正常に完了しました"
Exit Sub ' ← エラーがない場合ここで終了(ErrorHandlerをスキップ)
' === エラー処理ルーティン ===
ErrorHandler:
MsgBox "エラーが発生しました。" & vbCrLf & _
"エラー番号: " & Err.Number & vbCrLf & _
"内容: " & Err.Description, vbCritical, "エラー"
' 開いたファイルを閉じるなどのクリーンアップ処理
If Not wb Is Nothing Then
If wb.ReadOnly = False Then wb.Close False
End If
End Sub
📚 用語解説
GoToステートメント:指定したラベルの位置に処理をジャンプさせるVBAの構文。通常はコードの可読性を下げるため多用を避けますが、エラー処理(On Error GoTo)での使用は慣用的に認められています。ラベルは「ラベル名:(コロン)」の形式で行頭に配置します。
2-1. Exit Subを忘れないことが最重要
On Error GoToパターンで最も忘れやすいのが「Exit Sub」です。通常の処理の末尾にExit Subを書かないと、エラーがなかった場合でもプログラムがそのままErrorHandlerラベルに流れ込んでしまいます。「なぜかエラーメッセージが出るのにデバッグしても問題が見つからない」という場合、Exit Subの書き忘れが原因のことがあります。
' Exit Subがないと問題になる例
Sub BadExample()
On Error GoTo ErrorHandler
MsgBox "正常処理"
' ← Exit Subがない!
' 正常に終わっても次の行に進んでしまう
ErrorHandler:
MsgBox "エラー" ' ← 正常時もここが実行されてしまう!
End Sub
' ===
Sub GoodExample()
On Error GoTo ErrorHandler
MsgBox "正常処理"
Exit Sub ' ← 必ずExit SubでErrorHandlerをスキップ
ErrorHandler:
MsgBox "エラー" ' ← エラー時だけ実行される
End Sub
03 RESUME NEXT On Error Resume Next:エラーを無視して次の行へ 使いどころと危険な使い方、正しい使用パターン
📚 用語解説
On Error Resume Next:エラーが発生しても処理を停止せず次の行から実行を続ける構文。ループ処理での行スキップ・オブジェクト存在確認・任意処理など、特定の行のエラーを意図的に無視したい場合に使います。使い終わったら必ずOn Error GoTo 0で無効化することが鉄則です。On Error Resume Nextをプロシージャ全体に適用すると、意図しないエラーが全て無視されます。
「On Error Resume Next」は、エラーが発生しても無視して次の行から処理を続ける構文です。「エラーが出ても処理を止めたくない」場合に使いますが、誤用すると「エラーが出ていることに気づかずに処理が続く」危険なコードになります。On Error Resume Nextは、使い終わったらすぐにOn Error GoTo 0でエラー処理を無効化するか、On Error GoTo ラベルで通常のエラー処理に戻すことが重要です。
' On Error Resume Nextの使い方
Sub LoopWithErrorResumeNext()
On Error Resume Next ' エラー無視モード開始
Dim i As Integer
For i = 1 To 10
' 一部の行でエラーが出ても処理を継続したい
Cells(i, 2).Value = Cells(i, 1).Value / Cells(i, 3).Value
' エラーが起きたかどうかをErrで確認
If Err.Number <> 0 Then
Cells(i, 4).Value = "計算エラー: " & Err.Description
Err.Clear ' エラー情報をリセット(重要!)
End If
Next i
On Error GoTo 0 ' エラー無視モード終了(必須)
MsgBox "全行処理完了"
End Sub
「On Error Resume Nextを書いてエラーが出なくなった」というのは、エラーを無視しているだけで問題が解決しているわけではありません。処理が途中でスキップされたり、意図しない値が設定されたりします。特に「データを保存する処理」の前にOn Error Resume Nextを書くと、エラーで失敗したデータが保存される可能性があります。On Error Resume Nextの直後は必ずErr.Numberをチェックするか、On Error GoTo 0で無効化してください。
' シートの存在確認にOn Error Resume Nextを使う例
Function SheetExists(wsName As String) As Boolean
On Error Resume Next
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(wsName) ' 存在しない名前を指定するとエラー
On Error GoTo 0 ' すぐに無効化
SheetExists = Not ws Is Nothing
End Function
' 使い方
Sub TestSheetExists()
If SheetExists("データ") Then
MsgBox "「データ」シートが存在します"
Else
MsgBox "「データ」シートが見つかりません"
End If
End Sub
04 RESUME TYPES Resume・Resume Next・Resume ラベルの使い分け エラー後の処理再開位置を3パターンで制御する
On Error GoToでエラー処理ルーティンに飛んだ後、処理を再開したい場合は「Resume」ステートメントを使います。Resumeには3つの形式があり、エラー後にどこから処理を再開するかを指定できます。
| ステートメント | 再開位置 | 使う場面 |
|---|---|---|
| Resume | エラーが発生した行に戻って再実行 | エラーを修正・回避した後に同じ行を再試行したい場合 |
| Resume Next | エラーが発生した行の次の行から再開 | エラーが起きた行をスキップして続きを実行したい場合 |
| Resume ラベル名 | 指定したラベルの位置から再開 | 特定の処理ステップから再開したい場合 |
' Resumeで同じ行を再試行する例(ファイルロック対応)
Sub OpenWithRetry()
Dim filePath As String
Dim retryCount As Integer
filePath = "C:\Data\shared_report.xlsx"
retryCount = 0
On Error GoTo ErrorHandler
Dim wb As Workbook
Set wb = Workbooks.Open(filePath)
' ... データ処理 ...
wb.Close False
Exit Sub
ErrorHandler:
If Err.Number = 1004 And retryCount < 3 Then
' ファイルがロックされている可能性 → 3秒待って再試行
retryCount = retryCount + 1
MsgBox "ファイルが開けません。" & retryCount & "秒後に再試行します..."
Application.Wait Now + TimeValue("00:00:03")
Err.Clear
Resume ' ← エラーが発生した行(Set wb = ...)を再実行
Else
MsgBox "ファイルを開けませんでした: " & Err.Description, vbCritical
End If
End Sub
' Resume Nextでエラー行をスキップして続きを処理
Sub ProcessAllSheets()
On Error GoTo ErrorHandler
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
' 各シートにヘッダーを設定(保護シートでエラーが出る可能性)
ws.Cells(1, 1).Value = "処理日時"
ws.Cells(1, 2).Value = Now()
Next ws
Exit Sub
ErrorHandler:
' 保護シートは無視して次のシートへ
If Err.Number = 1004 Then ' 保護エラー
Err.Clear
Resume Next ' ← エラーが起きた次の行(Next ws)から再開 → 次のシートへ
Else
MsgBox "予期せぬエラー: " & Err.Description, vbCritical
End If
End Sub
05 ERR OBJECT Errオブジェクト:Number・Description・Sourceの活用 エラー情報を取得してログ記録・原因特定に活かす
Errオブジェクトは、直近に発生したエラーの情報を格納するVBA組み込みオブジェクトです。Number(エラー番号)・Description(エラーの説明文)・Source(エラーが発生した場所)の3つのプロパティが主要なものです。エラー処理ルーティンの中でこれらを参照することで、どんなエラーが発生したかを特定できます。
📚 用語解説
Errオブジェクト:VBAに組み込まれたエラー情報格納オブジェクト。エラーが発生するとNumber・Description・Sourceプロパティに情報が設定されます。Err.Clear()でエラー情報をリセットできます。エラーが発生していないときはErr.Number = 0です。On Error Resume Next使用時は処理の直後にErr.Numberをチェックしてエラーを検知します。
| プロパティ | 内容 | 型 | 使用例 |
|---|---|---|---|
| Err.Number | エラー番号(整数)。エラーなしは0 | Long | If Err.Number = 11 Then(ゼロ除算) |
| Err.Description | エラーの説明文(文字列) | String | MsgBox Err.Description |
| Err.Source | エラーが発生したアプリケーション/プロジェクト名 | String | MsgBox Err.Source |
| Err.Clear() | エラー情報をリセット(Number=0に戻す) | メソッド | Err.Clear(引数なし) |
' Errオブジェクトで詳細なエラーログを記録する例
Sub LoggingErrorHandler()
On Error GoTo ErrorHandler
' === 処理 ===
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("データ") ' シートが存在しない場合エラー
Dim total As Double
total = ws.Cells(1, 1).Value / ws.Cells(1, 2).Value ' ゼロ除算のリスク
MsgBox "結果: " & total
Exit Sub
ErrorHandler:
' エラーログをシートに記録
Dim logWs As Worksheet
On Error Resume Next ' ログシート取得に失敗しても止めない
Set logWs = ThisWorkbook.Sheets("エラーログ")
On Error GoTo 0
If Not logWs Is Nothing Then
Dim nextRow As Long
nextRow = logWs.Cells(logWs.Rows.Count, 1).End(xlUp).Row + 1
logWs.Cells(nextRow, 1).Value = Now() ' 日時
logWs.Cells(nextRow, 2).Value = Err.Number ' エラー番号
logWs.Cells(nextRow, 3).Value = Err.Description ' エラー内容
logWs.Cells(nextRow, 4).Value = Err.Source ' 発生元
End If
' ユーザーへのメッセージ
MsgBox "エラーが発生しました(No." & Err.Number & ")" & vbCrLf & _
Err.Description, vbCritical, "エラー"
End Sub
06 SELECT CASE ERROR エラー番号によるSelect Case分岐 主要なVBAエラー番号一覧と分岐処理の実践パターン
Err.Numberの値をSelect Caseで分岐することで、エラーの種類ごとに異なる対処ができます。「ファイルが見つからないなら別のパスを試す」「ゼロ除算なら0をセットする」のように、エラーに応じた適切な回復処理が書けます。よく出会うVBAのエラー番号を覚えておくと、原因特定が速くなります。
| エラー番号 | エラー内容 | 典型的な原因 |
|---|---|---|
| 11 | Division by zero(ゼロ除算) | 分母の値がゼロ |
| 13 | Type mismatch(型の不一致) | 文字列のセルを数値型の変数に代入 |
| 91 | Object variable not set(オブジェクト未設定) | Set前にオブジェクト変数を使用 |
| 1004 | Application-defined or object-defined error | シート/セル操作の多様なエラー(最頻出) |
| 53 | File not found(ファイルが見つからない) | 指定パスのファイルが存在しない |
| 9 | Subscript out of range(添字が範囲外) | 存在しない配列要素やシートを参照 |
| 70 | Permission denied(アクセス拒否) | ファイルが他のアプリで開かれている |
' エラー番号でSelect Case分岐する例
Sub SmartErrorHandler()
On Error GoTo ErrorHandler
' === 処理 ===
Dim filePath As String
filePath = "C:\Data\report.xlsx"
Workbooks.Open filePath
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("集計")
Dim result As Double
result = ws.Cells(5, 3).Value / ws.Cells(5, 4).Value
ws.Cells(5, 5).Value = result
Exit Sub
ErrorHandler:
Select Case Err.Number
Case 53 ' ファイルが見つからない
MsgBox "ファイルが見つかりません: " & filePath & vbCrLf & _
"ファイルが正しいフォルダにあるか確認してください", vbCritical
Case 9 ' シートが存在しない
MsgBox "「集計」シートが見つかりません。" & vbCrLf & _
"シート名を確認してください", vbExclamation
Case 11 ' ゼロ除算
ws.Cells(5, 5).Value = 0 ' ゼロで上書き
MsgBox "ゼロ除算のため結果を0にしました", vbInformation
Resume Next ' 次の行から続ける
Case 70 ' アクセス拒否
MsgBox "ファイルが他のアプリで開かれています。閉じてから再実行してください", vbExclamation
Case Else
MsgBox "予期せぬエラー(No." & Err.Number & "): " & Err.Description, vbCritical
End Select
End Sub
07 ON ERROR GOTO 0 On Error GoTo 0:エラー処理の無効化 エラー処理の有効範囲を制御して複数箇所に対応する
「On Error GoTo 0」は、有効になっているエラー処理(On Error GoTo または On Error Resume Next)を無効化するステートメントです。このステートメントを書いた後は、エラーが発生するとVBAのデフォルト動作(エラーメッセージを表示して停止)に戻ります。On Error GoTo 0は主に「On Error Resume Nextの適用範囲を限定する」または「複数のエラー処理を段階的に使い分ける」目的で使います。
' On Error GoTo 0で適用範囲を限定する
Sub ScopedErrorHandling()
' ===== フェーズ1: ファイル存在確認(エラーを無視して確認のみ) =====
Dim wb As Workbook
On Error Resume Next
Set wb = Workbooks.Open("C:\Data\optional.xlsx")
On Error GoTo 0 ' ← ここで無効化(これ以降は通常のエラー検知に戻る)
If wb Is Nothing Then
MsgBox "optionalファイルなし - スキップします"
Else
' ===== フェーズ2: ファイルが存在する場合の処理(エラーはしっかり検知) =====
On Error GoTo ProcessError
Dim ws As Worksheet
Set ws = wb.Sheets("レポート") ' ここでエラーが出たらProcessErrorへ
' ... 処理 ...
wb.Close False
On Error GoTo 0 ' 処理完了後に無効化
End If
Exit Sub
ProcessError:
MsgBox "ファイル処理中にエラー: " & Err.Description, vbCritical
If Not wb Is Nothing Then wb.Close False
End Sub
On Error Resume Nextを書いたら必ずOn Error GoTo 0でリセットする——これが鉄則です。On Error Resume Nextを書いたまま処理が進むと、意図しない箇所のエラーが全て無視されます。使い終わったらすぐにOn Error GoTo 0でリセットする習慣をつけてください。
08 BUSINESS PATTERNS 業務マクロでの実践エラー処理パターン ファイル操作・一括処理・外部接続の典型的なエラー対処コード
8-1. ファイル操作のエラー処理テンプレート
' ファイル操作の標準的なエラー処理テンプレート
Sub FileOperationTemplate()
Dim filePath As String
Dim wb As Workbook
filePath = "C:\Data\monthly_report.xlsx"
On Error GoTo ErrorHandler
' ===== 前処理 =====
Application.ScreenUpdating = False ' 画面更新停止(後処理で必ず戻す)
' ===== メイン処理 =====
Set wb = Workbooks.Open(filePath, ReadOnly:=False)
' データ処理
wb.Sheets(1).Cells(1, 1).Value = "処理済"
wb.Save
wb.Close
' ===== 後処理(正常完了) =====
Application.ScreenUpdating = True
MsgBox "処理完了: " & filePath, vbInformation
Exit Sub
' ===== エラー処理 =====
ErrorHandler:
Dim errNum As Long
Dim errDesc As String
errNum = Err.Number
errDesc = Err.Description
' 後処理(エラーでも必ず実行)
Application.ScreenUpdating = True
On Error Resume Next ' クリーンアップ中のエラーは無視
If Not wb Is Nothing Then wb.Close False ' 開いたファイルを閉じる
On Error GoTo 0
' ユーザーへの通知
Select Case errNum
Case 53
MsgBox "ファイルが見つかりません: " & filePath, vbCritical
Case 70
MsgBox "ファイルが他で開かれています。閉じてから再実行してください", vbExclamation
Case 1004
MsgBox "ファイル操作エラー(" & errNum & "): " & errDesc, vbCritical
Case Else
MsgBox "エラーが発生しました(" & errNum & "): " & errDesc, vbCritical
End Select
End Sub
8-2. ループ処理でのエラー対処(行単位のスキップ)
' ループ内でエラーが起きた行だけをスキップして継続
Sub BulkProcessWithErrorHandling()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Dim errorCount As Long
errorCount = 0
Dim r As Long
For r = 2 To lastRow
On Error GoTo RowError ' ← ループの中でOn Errorを設定し直す
' 処理(エラーが起きる可能性がある)
Dim divisor As Double
divisor = ws.Cells(r, 3).Value
ws.Cells(r, 4).Value = ws.Cells(r, 2).Value / divisor
ws.Cells(r, 5).Value = "OK"
GoTo NextRow ' ← エラーなし → ErrorHandlerをスキップ
RowError:
ws.Cells(r, 5).Value = "ERROR: " & Err.Description
errorCount = errorCount + 1
Err.Clear
NextRow:
Next r
On Error GoTo 0 ' ループ終了後に無効化
If errorCount > 0 Then
MsgBox lastRow - 1 & "行中" & errorCount & "行でエラーが発生しました。" & vbCrLf & _
"E列でエラー内容を確認してください", vbExclamation
Else
MsgBox "全" & lastRow - 1 & "行の処理が完了しました", vbInformation
End If
End Sub
09 COMMON MISTAKES よくある失敗とデバッグのコツ エラー処理を書いたのに動かない典型的な原因と対処法
| よくある失敗 | 原因 | 対処法 |
|---|---|---|
| エラー処理が動かない | On Error GoTo ラベルのラベル名が一致しない | ラベル名とOn Error GoToの名前を完全一致させる |
| Exit Subを書いたのにErrorHandlerが実行される | Exit Subがエラー処理ブロックの内側に書かれている | Exit SubはErrorHandler:ラベルの直前(外側)に書く |
| On Error Resume Nextの後もエラーで止まる | Err.Clearを忘れてエラー状態が残っている | エラー確認後にErr.Clear()を呼ぶ |
| エラーが発生したのにErr.Number = 0 | Err.Clearが先に呼ばれた・エラー処理内で別のOn Errorを使った | Err.Numberはエラー発生後すぐに変数に保存する |
9-1. デバッグの実践テクニック
エラー処理のデバッグで役立つテクニックをいくつか紹介します。
10 CLAUDE CODE Claude CodeでVBAエラー処理コードを自動生成 エラー処理コードの生成・デバッグ・改善をAIに任せる方法
VBAのエラー処理は「どのエラーが発生し得るか」「どう対処するか」の判断が難しく、業務マクロを堅牢にするために経験と知識が必要です。Claude Codeを使うと、「ファイルを開いて処理するマクロにエラー処理を追加して」と依頼するだけで、On Error GoToパターン・Errオブジェクト活用・クリーンアップ処理を含む堅牢なコードが生成されます。
11 CONCLUSION まとめ VBAエラー処理の全体像と実装のポイント
この記事では、VBAのエラー処理を11セクションで体系的に解説しました。On Error GoTo・Resume・Errオブジェクト・Select Case分岐・業務実践パターンまで、エラー処理の全体像を網羅しました。
VBAエラー処理の設計から実装まで、Claude Codeで即解決
「マクロのエラー処理をどう書けばいいか分からない」「本番のマクロが突然止まって困っている」「エラーログの仕組みを整備したい」——弊社AI鬼管理では、Claude Codeを活用した業務VBAマクロの堅牢化・自動化支援を提供しています。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. On Error GoToとOn Error Resume Nextの使い分けは?
A. On Error GoToは「エラーが発生したら専用の処理ルーティンに飛ぶ」——エラーごとに異なる処理が必要、後処理(ファイルを閉じるなど)が必要な場合に使います。On Error Resume Nextは「エラーが出ても無視して次の行へ進む」——エラーがあっても続けたいループ処理・存在確認・任意処理の特定行でのみ使います。基本はOn Error GoToで、On Error Resume Nextは適用範囲を最小限に限定して使います。
Q. Exit SubとExit Functionはエラー処理でなぜ必要ですか?
A. On Error GoTo ラベルを使う場合、エラーが起きなかったときに処理が正常終了した後、そのままErrorHandlerラベルまで「流れ込む」のを防ぐために必要です。Exit Sub(またはExit Function)をErrorHandlerラベルの直前に書くことで、正常終了した場合はエラー処理を完全にスキップします。
Q. Err.Clearは何のために使いますか?
A. エラーが発生してErr.Numberに番号が入った後、次のエラー確認が正確にできるようにリセットするために使います。特にOn Error Resume Nextを使ってエラーを確認した後は、Err.Clear()を呼ばないと前のエラー情報が残ったまま次の処理に進みます。If Err.Number <> 0 Then ... Err.Clear End Ifのパターンで使います。
Q. ループ内でOn Error GoToを使う場合の注意点は?
A. ループ内でOn Error GoToを使う場合、On Error GoTo ラベルはループの中で繰り返し有効化できます(VBAのOn Error GoToはプロシージャスコープのため)。ただし「Resume Nextでループの次の反復に戻る」「GoTo NextRowのようなラベルを使う」といったパターンで明示的に次の行/次の反復に移動するコードを書く必要があります。
Q. On Error GoTo -1とOn Error GoTo 0の違いは?
A. On Error GoTo 0はエラー処理ハンドラを無効化するステートメントです。On Error GoTo -1はエラー処理の「エラーステータス(保留中のエラー)」をリセットするステートメントで、エラーハンドラ内で2重にエラーが発生した場合に使います。通常の業務マクロではOn Error GoTo 0を使えば十分で、On Error GoTo -1が必要なケースはまれです。
Q. VBAエラー処理でデバッグするコツは何ですか?
A. ErrorHandlerの冒頭にMsgBox Err.Number & ": " & Err.DescriptionとDebug.Printを両方追加することで、「どんなエラーが出ているか」が即座に分かります。また、ブレークポイント(行頭クリック→赤丸)を設定してF8キーで1行ずつ実行するステップ実行は、エラーの発生箇所の特定に最も効果的です。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




