Excelで大量のデータを扱っていると、「特定の条件でデータを絞り込みたい」「毎回同じ条件でフィルターをかけるのが面倒」と感じることはありませんか。
そんなときに活躍するのが ExcelのAutoFilter(オートフィルター) です。
通常はマウス操作で簡単に使えるAutoFilterですが、毎回手動で設定するのは非効率です。そこでおすすめなのが VBA(Visual Basic for Applications)を使ったAutoFilterの自動化 です。
この記事では、
までを、VBA初心者でも理解できるように実践的なコード例付きで詳しく解説します。
Excel作業を効率化したい方は、ぜひ最後までご覧ください。
VBAでAutoFilterを使用する場合、Range オブジェクトに対して AutoFilter メソッドを指定します。
基本構文は次のとおりです。
Range("A1").AutoFilter Field:=1, Criteria1:="条件"
この基本構文を理解しておくだけで、VBAによるデータ抽出の幅が一気に広がります。
以下は、「部署」列(B列)から 「営業部」だけを抽出する例です。
Sub FilterByDepartment()
With Worksheets("Sheet1")
.Range("A1").AutoFilter Field:=2, Criteria1:="営業部"
End With
End Sub
このマクロを実行すると、Sheet1の表に対して
B列が「営業部」の行のみが表示されます。
部署名や商品名など、文字列条件での抽出によく使われる基本パターンです。
売上金額や数量など、数値データを条件に抽出したい場合も簡単です。
Sub FilterBySales()
With Worksheets("Sheet1")
.Range("A1").AutoFilter Field:=3, Criteria1:=">100000"
End With
End Sub
この例では、
3列目(C列)の数値が10万円を超えるデータのみを表示します。
">=" や "<=" などの比較演算子も利用できます。
VBAのAutoFilterでは、Criteria2 と Operator:=xlOr を使うことで
「AまたはB」といったOR条件を指定できます。
Sub FilterMultipleDepartments()
With Worksheets("Sheet1")
.Range("A1").AutoFilter Field:=2, _
Criteria1:="営業部", Operator:=xlOr, Criteria2:="企画部"
End With
End Sub
このマクロを実行すると、
「営業部」または「企画部」に該当する行のみが抽出されます。
AutoFilterは、列ごとに複数回設定することでAND条件として動作します。
Sub FilterByMultipleFields()
With Worksheets("Sheet1")
.Range("A1:D100").AutoFilter
.Range("A1:D100").AutoFilter Field:=2, Criteria1:="営業部"
.Range("A1:D100").AutoFilter Field:=4, Criteria1:=">=2024/01/01"
End With
End Sub
この例では、
という 複数条件を同時に満たすデータのみ を抽出します。
フィルターを解除して 全データを表示したい場合は、AutoFilterMode プロパティを使用します。
Sub ClearFilter()
With Worksheets("Sheet1")
If .AutoFilterMode Then .AutoFilterMode = False
End With
End Sub
この処理を入れておくことで、
前回のフィルター状態が残ってしまうトラブルを防止できます。
AutoFilter後は、表示されている行だけを対象に処理したいケースも多くあります。
その場合は SpecialCells(xlCellTypeVisible) を使います。
Sub CopyFilteredData()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
ws.Range("A1").CurrentRegion _
.SpecialCells(xlCellTypeVisible) _
.Copy Destination:=Worksheets("Sheet2").Range("A1")
End Sub
このマクロでは、
フィルター後に表示されているデータのみをSheet2へコピーします。
Worksheets("Sheet1") の名称を再確認するユーザーフォームの入力値を条件にして、
検索ツールのようなフィルター機能を作ることも可能です。
Private Sub CommandButton1_Click()
Dim dept As String
dept = TextBox1.Value
With Worksheets("Sheet1")
.Range("A1").AutoFilter Field:=2, Criteria1:=dept
End With
End Sub
フォーム入力型にすることで、
VBAに詳しくないユーザーでも簡単にデータ抽出が可能になります。
Excel VBAでAutoFilterを活用すれば、
条件抽出・検索・データ整理といった作業を一瞬で自動化できます。
基本構文を押さえるだけで、
まで幅広く対応可能です。
まずはシンプルなフィルターから試し、
徐々に応用することで、Excel業務は確実にスマートになります。
日々の作業時間を減らしたい方は、ぜひVBAによるAutoFilter自動化を取り入れてみてください。