はじめに
VBAで業務ツールを作っていると、必ず遭遇するのが「エラー」です。
- 実行したら突然止まる
- 意味不明なエラーメッセージ
- 原因がわからず作業が止まる
こうした問題に対処するために必要なのが**エラー処理(エラーハンドリング)**です。
本記事では、実務で必須となる
On Errorの使い方と実践的な書き方をわかりやすく解説します。
目次
- VBAのエラー処理とは
- On Errorの基本構文
- On Errorの3つの使い方
- 実務で使う標準テンプレート
- よくあるNG例
- 実務で使えるサンプル
- まとめ
1. VBAのエラー処理とは
VBAはエラーが発生すると、その場で処理が停止します。
例えば:
- ファイルが存在しない
- シート名が間違っている
- 0で割り算をした
エラー処理を書いていないと
マクロは途中で止まり、ユーザーは何もできなくなります。
そのため、実務では必ずエラー処理を実装します。
2. On Errorの基本構文
VBAのエラー処理は、"On Error"構文で行います。
基本形
Sub Sample()
On Error GoTo ErrHandler
' ===== 通常処理 =====
MsgBox "正常終了"
Exit Sub
ErrHandler:
MsgBox "エラー発生:" & Err.Description
End Sub
ポイント
- "On Error GoTo"でエラー時のジャンプ先を指定
- "Exit Sub"を必ず書く(重要)
- "Err"オブジェクトでエラー情報を取得
3. On Errorの3つの使い方
① On Error GoTo(基本・推奨)
エラー発生時に指定ラベルへジャンプ
On Error GoTo ErrHandler
- 実務では基本これを使う
- エラー処理を一箇所にまとめられる
② On Error Resume Next(注意が必要)
エラーが出ても無視して次へ進む
On Error Resume Next
NG例(危険)
エラーが発生しても気づかない
On Error Resume Next
result = 10 / 0
正しい使い方(限定用途)
「存在チェック」など限定的に使う
On Error Resume Next
Set ws = Worksheets("Sheet1")
On Error GoTo 0
If ws Is Nothing Then
MsgBox "シートが存在しません"
End If
③ On Error GoTo 0(リセット)
エラー処理を解除(デフォルトに戻す)
On Error GoTo 0
4. 実務で使う標準テンプレート
これを覚えるだけでOK(超重要)
Sub Sample()
On Error GoTo ErrHandler
' ===== メイン処理 =====
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
ws.Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "エラー番号:" & Err.Number & vbCrLf & _
"エラー内容:" & Err.Description
End Sub
5. よくあるNG例
• Exit Subを書いていない
正常時でもエラー処理が実行される
On Error GoTo ErrHandler
MsgBox "正常終了"
ErrHandler:
MsgBox "エラー"
• Resume Nextの乱用
全てのエラーを無視してしまう(危険)
On Error Resume Next
• エラーをユーザーに知らせない
実務ではNG
必ずメッセージ or ログ出力する
6. 実務で使えるサンプル
ファイルオープン処理
Sub OpenFile()
On Error GoTo ErrHandler
Workbooks.Open "C:\test.xlsx"
MsgBox "ファイルを開きました"
Exit Sub
ErrHandler:
MsgBox "ファイルが存在しないか、開けません"
End Sub
シート存在チェック
Function WorksheetExists(name As String) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = Worksheets(name)
On Error GoTo 0
WorksheetExists = Not ws Is Nothing
End Function
0除算防止
Sub Calc()
On Error GoTo ErrHandler
Dim result As Double
Dim divisor As Double
divisor = 0
If divisor = 0 Then
MsgBox "0では割れません"
Exit Sub
End If
result = 10 / divisor
Exit Sub
ErrHandler:
MsgBox "計算エラー"
End Sub
7. まとめ
VBAのエラー処理は、実務では必須スキルです。
本記事のポイント:
- "On Error GoTo"を基本として使う
- "Resume Next"は限定的に使う
- 必ず"Exit Sub"を書く
- エラー内容はユーザーに通知する
このパターンを覚えるだけで、
実務のトラブル対応力が大きく向上します。
おわりに
エラー処理が書けるようになると、
VBAは「動くコード」から「使えるツール」に変わります。
実務VBAシリーズ
- 第1回:複数Excelファイルを自動集計する方法
- 第2回:Dictionaryで売上データを集計する方法
- 第3回:100万行Excelを3秒で処理する方法(高速化完全ガイド)
- 第4回:現場で使えるVBA便利ツール5選
- 第5回:エラー処理の基本と実践|On Error完全解説(今回)