Excel VBA 逆引き集 | 数式セル

Excel VBA
スポンサーリンク

数式セルの処理

Excel VBAで「数式セルだけ処理したい」「フィルタで絞ったセルだけ対象にしたい」といった場面はよくあります。
このとき便利なのが SpecialCellsAutoFilter です。初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • SpecialCells
    • xlCellTypeFormulas → 数式セルだけを対象にできる。
    • xlCellTypeVisible → フィルタや非表示を無視して「見えているセル」だけ対象。
  • AutoFilter
    • シートにフィルタを設定して、条件に合う行だけを表示。
    • その後 SpecialCells(xlCellTypeVisible) で「絞り込まれたセル」だけ処理。

テンプレ1:数式セルだけ色付け

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

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

    If Not formulaRg Is Nothing Then
        formulaRg.Interior.Color = vbYellow
    End If
End Sub
VB
  • ポイント:
    • 範囲内の「数式セル」だけ黄色に。
    • 数値や文字が入っているセルは対象外。

テンプレ2:数式セルだけ値に変換(数式を固定値化)

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

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

    If Not formulaRg Is Nothing Then
        formulaRg.Value = formulaRg.Value
    End If
End Sub
VB
  • ポイント:
    • 数式セルだけ「値」に変換。
    • 計算結果を固定したいときに便利。

テンプレ3:AutoFilter+可視セルだけ処理

Sub FilterAndProcessVisibleCells()
    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 visRg As Range
    On Error Resume Next
    Set visRg = rg.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Not visRg Is Nothing Then
        visRg.Interior.Color = vbGreen
    End If

    ' フィルタ解除
    ws.AutoFilterMode = False
End Sub
VB
  • ポイント:
    • フィルタで「東京」だけ表示。
    • 可視セルだけ緑色に。

テンプレ4:フィルタ後の数式セルだけ処理

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

    ' B列で「>100」をフィルタ
    rg.AutoFilter Field:=2, Criteria1:=">100"

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

    If Not formulaRg Is Nothing Then
        formulaRg.Font.Color = vbRed
    End If

    ' フィルタ解除
    ws.AutoFilterMode = False
End Sub
VB
  • ポイント:
    • フィルタで絞り込み → さらに数式セルだけ赤文字に。
    • SpecialCells(xlCellTypeFormulas).SpecialCells(xlCellTypeVisible) の組み合わせ。

例題で練習

'例1:数式セルだけ色付け
Sub Example1()
    HighlightFormulaCells
End Sub

'例2:数式セルを値に変換
Sub Example2()
    ConvertFormulaToValue
End Sub

'例3:フィルタ後の可視セルだけ処理
Sub Example3()
    FilterAndProcessVisibleCells
End Sub

'例4:フィルタ後の数式セルだけ処理
Sub Example4()
    FilterAndFormulaCells
End Sub
VB

初心者向けポイント

  • SpecialCellsは強力 → 数式セルや可視セルだけを簡単に抽出できる。
  • エラー処理が必須 → 対象セルがない場合はエラーになるので On Error Resume Next を入れる。
  • AutoFilterと組み合わせると便利 → 条件で絞り込んだ後に「見えているセル」だけ処理可能。
  • 実務で便利 → 数式セルの固定化、フィルタ後の集計や色付けなど。

👉 この「SpecialCells / AutoFilter × 数式セルテンプレ」を覚えておけば、Excel VBAで フィルタ後の数式セル処理や表示セルだけの操作 を高速に実務へ応用できます。

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