0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【実務VBA⑤】エラー処理の基本と実践|On Error完全解説

0
Last updated at Posted at 2026-04-29

はじめに

VBAで業務ツールを作っていると、必ず遭遇するのが「エラー」です。

  • 実行したら突然止まる
  • 意味不明なエラーメッセージ
  • 原因がわからず作業が止まる

こうした問題に対処するために必要なのが**エラー処理(エラーハンドリング)**です。

本記事では、実務で必須となる
On Errorの使い方と実践的な書き方をわかりやすく解説します。

目次

  1. VBAのエラー処理とは
  2. On Errorの基本構文
  3. On Errorの3つの使い方
  4. 実務で使う標準テンプレート
  5. よくあるNG例
  6. 実務で使えるサンプル
  7. まとめ

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シリーズ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?