ここまでの組み合わせに AutoFilter を加えると、検索・抽出・加工・フィルタリングまで一気通貫で扱えるようになります。
実務で役立つ応用テンプレを整理しました。
基本操作(AutoFilter)
- 表全体にフィルタを設定
Range("A1").CurrentRegion.AutoFilter
VB- 特定列に条件フィルタ
Range("A1").CurrentRegion.AutoFilter Field:=2, Criteria1:="東京都"
VB- 複数条件フィルタ
Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:="渋谷区", Operator:=xlOr, Criteria2:="新宿区"
VBFind × AutoFilter
- 検索結果の列にフィルタを設定
Dim tbl As Range, f As Range
Set tbl = Range("A1").CurrentRegion
Set f = tbl.Find("市区町村")
If Not f Is Nothing Then
tbl.AutoFilter Field:=f.Column - tbl.Column + 1, Criteria1:="渋谷区"
End If
VB- 検索結果の値を基準にフィルタ
Dim tbl As Range, f As Range
Set tbl = Range("A1").CurrentRegion
Set f = tbl.Find("横浜市")
If Not f Is Nothing Then
tbl.AutoFilter Field:=f.Column - tbl.Column + 1, Criteria1:=f.Value
End If
VBSpecialCells × AutoFilter
- フィルタ後の可視セルを強調
Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.AutoFilter Field:=2, Criteria1:="東京都"
tbl.SpecialCells(xlCellTypeVisible).Interior.Color = vbYellow
VB- フィルタ後の空白セルを補完
Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.AutoFilter Field:=3, Criteria1:="<>"
On Error Resume Next
tbl.SpecialCells(xlCellTypeBlanks).Value = "未入力"
On Error GoTo 0
VBOffset × Resize × AutoFilter
- 表の右隣にコピーしてフィルタ
Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.Offset(0, tbl.Columns.Count + 1).Resize(tbl.Rows.Count, tbl.Columns.Count).Value = tbl.Value
tbl.Offset(0, tbl.Columns.Count + 1).Resize(tbl.Rows.Count, tbl.Columns.Count).AutoFilter Field:=1, Criteria1:="神奈川県"
VB- 表の下にコピーしてフィルタ
Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.Offset(tbl.Rows.Count + 2, 0).Resize(tbl.Rows.Count, tbl.Columns.Count).Value = tbl.Value
tbl.Offset(tbl.Rows.Count + 2, 0).Resize(tbl.Rows.Count, tbl.Columns.Count).AutoFilter Field:=2, Criteria1:="大阪府"
VBFind × SpecialCells × AutoFilter 応用
- 検索結果列をフィルタし、可視セルだけ加工
Dim tbl As Range, f As Range
Set tbl = Range("A1").CurrentRegion
Set f = tbl.Find("都道府県")
If Not f Is Nothing Then
tbl.AutoFilter Field:=f.Column - tbl.Column + 1, Criteria1:="東京都"
tbl.SpecialCells(xlCellTypeVisible).Font.Bold = True
End If
VB- 検索結果範囲を拡張してフィルタ+空白補完
Dim f As Range
Set f = Range("A1").CurrentRegion.Find("市区町村")
If Not f Is Nothing Then
f.Resize(1, 3).AutoFilter Field:=1, Criteria1:="<>"
On Error Resume Next
f.Resize(1, 3).SpecialCells(xlCellTypeBlanks).Value = "N/A"
On Error GoTo 0
End If
VB高度な応用
- 表全体をフィルタして右隣に抽出結果コピー
Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.AutoFilter Field:=2, Criteria1:="東京都"
tbl.SpecialCells(xlCellTypeVisible).Copy Destination:=tbl.Offset(0, tbl.Columns.Count + 2).Cells(1, 1)
VB- フィルタ後の可視セルを集計列に追加
Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.AutoFilter Field:=3, Criteria1:="渋谷区"
tbl.Offset(0, tbl.Columns.Count).Resize(tbl.Rows.Count, 1).Value = "対象"
tbl.Offset(0, tbl.Columns.Count).Resize(tbl.Rows.Count, 1).SpecialCells(xlCellTypeVisible).Value = "抽出済"
VB- フィルタ後の可視セルを合計行に追加
Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.AutoFilter Field:=2, Criteria1:="東京都"
tbl.Offset(tbl.Rows.Count, 0).Resize(1, tbl.Columns.Count).Value = "合計行"
tbl.SpecialCells(xlCellTypeVisible).Interior.Color = vbCyan
VB実務での使い分けポイント
- 表全体 → CurrentRegion
- 検索 → Find / FindNext
- 隣接セル操作 → Offset
- 範囲拡張 → Resize
- 特定セル抽出 → SpecialCells
- フィルタリング → AutoFilter
💡 この「Cells × Range × Offset × Resize × CurrentRegion × SpecialCells × Find × AutoFilter」テンプレを押さえておけば、表全体の動的検索・抽出・加工・フィルタリング・コピーまで自在に扱えます。

