On Error Resume Next 基本
VBAでよく使うエラー処理のひとつが On Error Resume Next です。
これは「エラーが発生しても止まらず、次の行へ進む」という仕組みです。初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- 通常の動作:
VBAはエラーが出ると処理を止めてエラーメッセージを表示します。 - Resume Nextを使うと:
エラーが出ても止まらず「次の行」に進みます。
→ ただし「エラーを無視する」わけではなく、Err.NumberやErr.Descriptionに情報が残ります。
テンプレ1:存在しないシートを参照しても止まらない
Sub ResumeNext_Basic()
On Error Resume Next ' エラーが出ても止まらない
Worksheets("NoSheet").Activate ' 存在しないシート → エラー
If Err.Number <> 0 Then
MsgBox "エラー発生: " & Err.Description
Err.Clear ' エラー情報をクリア
End If
On Error GoTo 0 ' 通常のエラー動作に戻す
End Sub
VB- ポイント:
Err.Numberが0以外ならエラー発生。Err.Clearでエラー情報を消す。On Error GoTo 0で通常動作に戻す。
テンプレ2:ファイルが存在しない場合でも処理を続行
Sub ResumeNext_FileCheck()
Dim f As Integer
f = FreeFile
On Error Resume Next
Open "C:\no\such\file.txt" For Input As #f
If Err.Number <> 0 Then
MsgBox "ファイルが存在しません: " & Err.Description
Err.Clear
Else
MsgBox "ファイルを開けました!"
Close #f
End If
On Error GoTo 0
End Sub
VB- ポイント:
- ファイルが無い場合でも止まらずに「存在しません」と表示できる。
- 実務で「ファイルがあれば処理、なければスキップ」といった場面に便利。
テンプレ3:複数処理の中で失敗したものだけスキップ
Sub ResumeNext_Loop()
Dim i As Long
For i = 1 To 5
On Error Resume Next
Worksheets("Sheet" & i).Activate
If Err.Number <> 0 Then
MsgBox "Sheet" & i & " は存在しません"
Err.Clear
End If
On Error GoTo 0
Next i
End Sub
VB- ポイント:
- ループ処理で「存在しないシートはスキップ」できる。
- エラーを無視せず、必ず判定してログやメッセージを残す。
例題で練習
'例1:存在しないシートを参照 → エラーを捕まえて続行
'例2:ファイルが無い場合 → エラーを捕まえて「存在しません」と表示
'例3:複数シートを順番に開く → 無いシートはスキップ
VB初心者向けポイント
- Resume Nextは「無視」ではなく「次へ進む」
- 必ずErr.Numberで判定する → そうしないと「気づかないまま処理が進む」危険あり
- Err.Clearでリセット → 次の処理に影響しないようにする
- On Error GoTo 0で通常動作に戻す → Resume Nextを垂れ流しにしない
- 実務では「存在チェック」「スキップ処理」に便利
👉 この「On Error Resume Nextテンプレ」を覚えておけば、Excel VBAで エラーを止めずに処理を続行しつつ、必要な場面でエラーを判定して安全に処理する ことができます。
