Excel VBA でオートフィルターを活用し、特定レコードを抽出・解除する方法【初心者向けサンプル】

目次

概要

本記事では、Excel VBA の AutoFilter メソッド を利用して、テーブル内のデータを一時的に抽出し、処理後にフィルターを解除する一連の手順を解説いたします。抽出対象が頻繁に変わる場合でも、マクロ化しておくことで作業を自動化でき、業務効率を向上させることができます。


前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
データ範囲B2:E40 に見出し行を含む表が配置されている想定
マクロ設置先標準モジュール

サンプルコード(VBA)

Sub FilterAndClear()

    Dim rngTable As Range       ' データ範囲
    Dim wsData   As Worksheet   ' 対象シート
    
    Set wsData   = ActiveSheet
    Set rngTable = wsData.Range("B2").CurrentRegion   ' 見出し行を含む範囲を自動取得
    
    '----- フィルターを設定(例:担当者列=「森」だけ抽出)-----
    rngTable.AutoFilter Field:=2, Criteria1:="森"
    
    ' (抽出後に必要な処理を実行)
    
    '----- 抽出条件をクリア -----
    rngTable.AutoFilter
    
    '----- フィルター自体を無効化 -----
    If wsData.AutoFilterMode Then
        wsData.AutoFilterMode = False
    End If

End Sub

コード解説

説明
7Range("B2").CurrentRegion で見出し行を含む表全体を取得しています。開始セルは業務に合わせて変更可能です。
11Field:=2 は範囲内の 2 列目(B 列)のことを示します。Criteria1:="森" で担当者「森」だけを抽出しています。
16rngTable.AutoFilter と引数なしで呼び出すと、設定済みの抽出条件のみを解除します。
19–21ワークシート全体のフィルター表示自体をオフにしたい場合は、AutoFilterMode = False を使用します。

応用例

目的実装のヒント
数値条件で抽出したいCriteria1:=">500" のように比較演算子を含めることで範囲指定が可能です。
OR 条件を設定したいCriteria1:=Array("森", "林"), Operator:=xlFilterValues を使用します。
抽出直後に可視セルのみコピーしたいrngTable.SpecialCells(xlCellTypeVisible).Copy で可視セルを一括コピーできます。

よくある質問

質問回答
複数列にフィルターを設定するにはどうすればよいですか。2 回目以降の AutoFilter 呼び出しで別の Field を指定すると、AND 条件で複合フィルターを実現できます。
Table(リストオブジェクト)形式でも使えますか。テーブル名を ListObjects("テーブル名").Range に置き換えて同じ手順で操作可能です。

まとめ

AutoFilter メソッドを VBA で操作すると、データ抽出から解除までをワンステップで実行できます。まずは上記コードを実行し、担当者「森」の行のみが抽出され、処理後に元の全行が表示に戻ることをご確認ください。抽出条件や対象範囲を変更すれば、あらゆるデータセットに応用いただけます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次