Excel VBA 逆引き集 | よくある業務エラー対策

Excel VBA
スポンサーリンク

よくある業務エラー対策

Excel VBAを業務で使うと、よくあるエラーに遭遇します。
初心者がつまずきやすい典型的なエラーと、その対策を「逆引き集」形式でまとめました。
コード例やテンプレートを交えて、かみ砕いて説明します。


1. シートが存在しないエラー

よくある場面

Worksheets("Report").Activate   ' Reportシートが存在しないとエラー
VB

対策テンプレ

Sub SafeActivateSheet()
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = Worksheets("Report")
    On Error GoTo 0
    
    If ws Is Nothing Then
        MsgBox "Reportシートが存在しません。"
    Else
        ws.Activate
    End If
End Sub
VB
  • ポイント:
    • On Error Resume Next で一時的にエラーを無視。
    • If ws Is Nothing で存在チェック。

2. ファイルが存在しないエラー

よくある場面

Workbooks.Open "C:\data\report.xlsx"   ' ファイルが無いとエラー
VB

対策テンプレ

Sub SafeOpenFile()
    Dim path As String
    path = "C:\data\report.xlsx"
    
    If Dir(path) = "" Then
        MsgBox "ファイルが存在しません: " & path
    Else
        Workbooks.Open path
    End If
End Sub
VB
  • ポイント:
    • Dir(path) で存在チェック。
    • 無ければメッセージを出して止める。

3. 数値変換エラー(文字列を数値に変換できない)

よくある場面

Dim x As Long
x = CLng("ABC")   ' 数値に変換できずエラー
VB

対策テンプレ

Sub SafeConvert()
    Dim val As String
    val = "ABC"
    
    If IsNumeric(val) Then
        MsgBox "数値変換成功: " & CLng(val)
    Else
        MsgBox "数値に変換できません: " & val
    End If
End Sub
VB
  • ポイント:
    • IsNumeric で数値かどうか判定。
    • 変換できない場合は処理を分ける。

4. ゼロ除算エラー

よくある場面

Dim x As Double
x = 10 / 0   ' ゼロ除算でエラー
VB

対策テンプレ

Sub SafeDivide()
    Dim a As Double, b As Double
    a = 10: b = 0
    
    If b = 0 Then
        MsgBox "ゼロ除算はできません。"
    Else
        MsgBox "結果: " & a / b
    End If
End Sub
VB
  • ポイント:
    • 割る数がゼロかどうかを事前チェック。

5. 空セル参照エラー

よくある場面

Dim x As Double
x = Worksheets("Data").Range("A1").Value   ' 空セルだと型変換エラー
VB

対策テンプレ

Sub SafeCellRead()
    Dim val As Variant
    val = Worksheets("Data").Range("A1").Value
    
    If IsEmpty(val) Or val = "" Then
        MsgBox "セルが空です。"
    Else
        MsgBox "セルの値: " & val
    End If
End Sub
VB
  • ポイント:
    • IsEmpty="" で空セルを判定。

6. 配列の範囲外アクセス

よくある場面

Dim arr(1 To 3) As Long
Debug.Print arr(4)   ' 範囲外でエラー
VB

対策テンプレ

Sub SafeArrayAccess()
    Dim arr(1 To 3) As Long
    Dim i As Integer
    
    i = 4
    If i < LBound(arr) Or i > UBound(arr) Then
        MsgBox "配列の範囲外です。"
    Else
        MsgBox "値: " & arr(i)
    End If
End Sub
VB
  • ポイント:
    • LBoundUBound で範囲チェック。

例題で練習

'例1:存在しないシートを参照 → 安全にチェック
'例2:ファイルが無い場合 → メッセージ表示
'例3:文字列を数値に変換 → IsNumericで判定
'例4:ゼロ除算 → 割る数を事前チェック
'例5:空セル参照 → IsEmptyで判定
'例6:配列範囲外 → LBound/UBoundでチェック
VB

初心者向けポイント

  • 「事前チェック」+「エラー処理」で安全にする
  • よくある業務エラーは定型パターンで防げる
  • Err.Number / Err.Description を組み合わせるとさらに便利
  • ログに残すと後から調査が楽

👉 この「よくある業務エラー対策テンプレ」を覚えておけば、Excel VBAで 業務で頻発する典型的なエラーを事前に防ぎ、安全に処理を続ける仕組み を簡単に作成できます。

タイトルとURLをコピーしました