Excel VBA 逆引き集 | 可視セルだけ処理

Excel VBA
スポンサーリンク

可視セルだけ処理

Excelで「フィルタをかけた状態」や「行・列を非表示にした状態」で処理をするとき、通常のループでは 非表示セルも含まれてしまう ことがあります。
そこで便利なのが SpecialCells(xlCellTypeVisible)AutoFilter の組み合わせです。初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • SpecialCells(xlCellTypeVisible)
    → フィルタや非表示を無視して「見えているセル」だけを対象にできる。
  • AutoFilter
    → 条件で絞り込みを行い、その後「可視セルだけ処理」する。
  • エラー処理が必須
    → 可視セルが存在しない場合はエラーになるので On Error Resume Next を入れる。

テンプレ1:可視セルだけ色付け

Sub VisibleCells_Color()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rg As Range: Set rg = ws.Range("A2:A20")

    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 = vbYellow
    End If
End Sub
VB
  • ポイント: フィルタや非表示で見えているセルだけ黄色に。

テンプレ2:可視セルだけ合計

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

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

    If Not visRg Is Nothing Then
        MsgBox "可視セルの合計=" & WorksheetFunction.Sum(visRg)
    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 FilterAndLoopVisibleCells()
    Dim ws As Worksheet: Set ws = Worksheets("Data")
    Dim rg As Range: Set rg = ws.Range("B2:B20")

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

    Dim visRg As Range, c As Range
    On Error Resume Next
    Set visRg = rg.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Not visRg Is Nothing Then
        For Each c In visRg
            If c.Row > 1 Then ' ヘッダー行を除外
                c.Value = c.Value & "★"
            End If
        Next c
    End If

    ' フィルタ解除
    ws.AutoFilterMode = False
End Sub
VB
  • ポイント: フィルタで絞り込んだセルだけループ処理。

例題で練習

'例1:可視セルだけ色付け
Sub Example1()
    VisibleCells_Color
End Sub

'例2:可視セルだけ合計
Sub Example2()
    VisibleCells_Sum
End Sub

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

'例4:フィルタ後の可視セルをループ処理
Sub Example4()
    FilterAndLoopVisibleCells
End Sub
VB

初心者向けポイント

  • SpecialCells(xlCellTypeVisible) → 可視セルだけ対象にできる。
  • AutoFilterと組み合わせると強力 → 条件で絞り込んだ後に処理可能。
  • エラー処理を忘れない → 可視セルがないとエラーになる。
  • 用途は多彩 → 合計、コピー、色付け、ループ処理など。

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

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