Excel VBA | 「Cells × Range × Offset × Resize × CurrentRegion × SpecialCells × Find × AutoFilter」応用テンプレ集

Excel VBA VBA
スポンサーリンク

ここまでの組み合わせに AutoFilter を加えると、検索・抽出・加工・フィルタリングまで一気通貫で扱えるようになります。
実務で役立つ応用テンプレを整理しました。


基本操作(AutoFilter)

  1. 表全体にフィルタを設定
Range("A1").CurrentRegion.AutoFilter
VB
  1. 特定列に条件フィルタ
Range("A1").CurrentRegion.AutoFilter Field:=2, Criteria1:="東京都"
VB
  1. 複数条件フィルタ
Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:="渋谷区", Operator:=xlOr, Criteria2:="新宿区"
VB

Find × AutoFilter

  1. 検索結果の列にフィルタを設定
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
  1. 検索結果の値を基準にフィルタ
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
VB

SpecialCells × AutoFilter

  1. フィルタ後の可視セルを強調
Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.AutoFilter Field:=2, Criteria1:="東京都"
tbl.SpecialCells(xlCellTypeVisible).Interior.Color = vbYellow
VB
  1. フィルタ後の空白セルを補完
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
VB

Offset × Resize × AutoFilter

  1. 表の右隣にコピーしてフィルタ
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
  1. 表の下にコピーしてフィルタ
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:="大阪府"
VB

Find × SpecialCells × AutoFilter 応用

  1. 検索結果列をフィルタし、可視セルだけ加工
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
  1. 検索結果範囲を拡張してフィルタ+空白補完
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

高度な応用

  1. 表全体をフィルタして右隣に抽出結果コピー
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
  1. フィルタ後の可視セルを集計列に追加
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
  1. フィルタ後の可視セルを合計行に追加
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」テンプレを押さえておけば、表全体の動的検索・抽出・加工・フィルタリング・コピーまで自在に扱えます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました