可視セルだけ処理
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で フィルタ後のデータ処理や非表示行を除いた操作 を高速に実務へ応用できます。
