Excel VBA 逆引き集 | エラーセル

Excel VBA
スポンサーリンク

エラーセルを処理

Excelで「#DIV/0!」「#N/A」「#VALUE!」などの エラーセルだけ処理したい 場面があります。
このとき便利なのが SpecialCells(xlCellTypeFormulas, xlErrors)AutoFilter の組み合わせです。初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • SpecialCells(xlCellTypeFormulas, xlErrors)
    → 範囲内の「エラーを返す数式セル」だけを抽出。
  • SpecialCells(xlCellTypeVisible)
    → フィルタや非表示を無視して「見えているセル」だけ対象。
  • 組み合わせると強力
    → 「フィルタ後のエラーセルだけ処理」が可能。
  • エラー処理が必須
    → エラーセルが存在しない場合はエラーになるので On Error Resume Next を入れる。

テンプレ1:エラーセルだけ色付け

Sub HighlightErrorCells()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rg As Range: Set rg = ws.Range("A1:D20")

    Dim errRg As Range
    On Error Resume Next
    Set errRg = rg.SpecialCells(xlCellTypeFormulas, xlErrors)
    On Error GoTo 0

    If Not errRg Is Nothing Then
        errRg.Interior.Color = vbRed
    End If
End Sub
VB
  • ポイント:
    • 範囲内の「エラーセル」だけ赤色に。
    • 通常の数値や文字は対象外。

テンプレ2:エラーセルを「0」に置き換える

Sub ReplaceErrorWithZero()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rg As Range: Set rg = ws.Range("B2:B20")

    Dim errRg As Range, c As Range
    On Error Resume Next
    Set errRg = rg.SpecialCells(xlCellTypeFormulas, xlErrors)
    On Error GoTo 0

    If Not errRg Is Nothing Then
        For Each c In errRg
            c.Value = 0
        Next c
    End If
End Sub
VB
  • ポイント: エラーセルだけを「0」に変換。

テンプレ3:AutoFilter+エラーセルだけ処理

Sub FilterAndErrorCells()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rg As Range: Set rg = ws.Range("A1:C20")

    ' A列で「東京」だけフィルタ
    rg.AutoFilter Field:=1, Criteria1:="東京"

    Dim errRg As Range
    On Error Resume Next
    Set errRg = rg.SpecialCells(xlCellTypeFormulas, xlErrors).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Not errRg Is Nothing Then
        errRg.Font.Color = vbBlue
    End If

    ' フィルタ解除
    ws.AutoFilterMode = False
End Sub
VB
  • ポイント:
    • フィルタで「東京」だけ表示。
    • さらに「エラーセルだけ青文字」に。

テンプレ4:エラーセルをカウント

Sub CountErrorCells()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rg As Range: Set rg = ws.Range("C2:C50")

    Dim errRg As Range
    On Error Resume Next
    Set errRg = rg.SpecialCells(xlCellTypeFormulas, xlErrors)
    On Error GoTo 0

    If Not errRg Is Nothing Then
        MsgBox "エラーセルの数=" & errRg.Count
    End If
End Sub
VB
  • ポイント: エラーセルの件数を数える。

例題で練習

'例1:エラーセルだけ色付け
Sub Example1()
    HighlightErrorCells
End Sub

'例2:エラーセルを「0」に置き換える
Sub Example2()
    ReplaceErrorWithZero
End Sub

'例3:フィルタ後のエラーセルだけ処理
Sub Example3()
    FilterAndErrorCells
End Sub

'例4:エラーセルをカウント
Sub Example4()
    CountErrorCells
End Sub
VB

初心者向けポイント

  • xlCellTypeFormulas, xlErrors → エラーを返す数式セルだけ対象。
  • xlCellTypeConstants → 入力値セル。
  • xlCellTypeBlanks → 空白セル。
  • xlCellTypeVisible → フィルタや非表示を無視して「見えているセル」だけ対象。
  • エラー処理を忘れない → エラーセルがないとエラーになる。

👉 この「SpecialCells / AutoFilter × エラーセルテンプレ」を覚えておけば、Excel VBAで エラーセルの検出・修正・フィルタ後のエラー処理 を高速に実務へ応用できます。

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