A子さん「マクロを実行したらエラーで止まった…」
「“型が一致しません”とか“インデックスが有効ではありません”って出ても、どこを直せばいいのか分からないよ…」



そんな悩み、エラー処理を入れておけば落ち着いて対処できます!
結論:On Error を使えば、エラーが出てもマクロを止めずに処理を続けられる!
目次
On Errorとは?【基本構文】
VBAでは実行中にエラーが起きると、強制終了してしまうことがあります。On Errorを使えば、そのエラーに対して柔軟に対応できます。
主な構文は次の2つです:
On Error Resume Next ' エラーが起きても無視して次の行へ On Error GoTo ラベル名 ' エラーが起きたら指定したラベルにジャンプ
On Error Resume Nextの使い方
On Error Resume Next Dim result As Double result = 10 / 0 ' ゼロ除算 → エラーだがスキップされる MsgBox "処理が続行されました"



軽微なエラーを無視して処理を続けたい場合に便利です。
On Error GoToの使い方
On Error GoTo エラー処理
Dim result As Double
result = 10 / 0 ' ゼロ除算
MsgBox "この行は実行されません"
Exit Sub
エラー処理:
MsgBox "エラーが発生しました"



エラー発生時に特定の処理へ飛ばしたい時に使います。
Errオブジェクトで詳細を確認する
On Error Resume Next
Dim num As Double
num = 1 / 0
If Err.Number <> 0 Then
MsgBox "エラー番号:" & Err.Number & vbCrLf & "説明:" & Err.Description
Err.Clear ' エラー情報をクリア
End If



Err.Number や Err.Description を使えば、何のエラーか把握しやすくなります。
実務でよく使うエラー処理パターン
ファイルが存在しない時の処理
Dim wb As Workbook
On Error Resume Next
Set wb = Workbooks.Open("C:\存在しないファイル.xlsx")
If wb Is Nothing Then
MsgBox "ファイルが見つかりません"
End If
On Error GoTo 0
セルの値を数値変換して失敗する場合
Dim value As Double
On Error Resume Next
value = CDbl(Cells(1, 1).Value)
If Err.Number <> 0 Then
MsgBox "数値に変換できませんでした"
Err.Clear
End If
エラー処理を解除する:On Error GoTo 0
On Error Resume Next ' エラー処理を使う処理… On Error GoTo 0 ' エラー処理を解除(以後は通常通り止まる)
エラー処理を使う時の注意点
| 注意点 | 内容 |
|---|---|
| エラーを無視しすぎない | On Error Resume Next を多用しすぎると、不具合の原因が分かりづらくなります |
Err.Clear を忘れない | 連続した処理でエラー情報が残っていると、誤判定のもとになります |
必ず On Error GoTo 0 で解除する | エラー処理のスコープを明確にしましょう |
まとめ
| 項目 | ポイント |
|---|---|
On Error Resume Next | エラーを無視して処理を継続 |
On Error GoTo ラベル | エラー時に特定の処理へ移動 |
Err.Number / Err.Description | エラーの内容を把握する |
On Error GoTo 0 | エラー処理の解除 |

コメント