【VBA関係】VBAでExcelテーブルデータをオートフィルタで絞り込む方法|ポテの学習メモ #008
アフィリエイト広告を利用しています。

次のテーブルを操作する。

商品カテゴリーを「食品」で絞りこむ。コードは次の通り。なお、テーブルのインデックスは1(ListObject(1)
)であることが前提。
Sub ApplyCategoryFilter()
' 変数宣言
Dim ws As Worksheet
Dim tbl As ListObject
Dim rng As Range
' ワークシートを取得
Set ws = ThisWorkbook.Worksheets(1)
' テーブル(ListObject)を取得
Set tbl = ws.ListObjects(1)
' 商品カテゴリーを食品で絞り込み
tbl.Range.AutoFilter 2, "食品"
End Sub

意図通りに絞り込まれた。
なお、Autofilter
メソッドの引数の意味は下表の通り。
引数 | 必須/省略可 | 説明 |
---|---|---|
Field | 必須 | フィルターを適用する列番号(1 から始まる) |
Criteria1 | 必須 | フィルター条件(数値、文字列、ワイルドカード "*" など) |
Operator | 省略可 | フィルターの条件を組み合わせる場合に使用(xlAnd 、xlOr など) |
Criteria2 | 省略可 | Operator を使用する場合の第2条件 |
VisibleDropDown | 省略可 | フィルターボタンを表示するかどうか(True または False ) |
tbl.Range.AutoFilter 2, "食品"
のところは、tbl.DataBodyRange.AutoFilter 2, "食品"
にしても結果は同じ。
Sub ApplyCategoryFilter2()
' 変数宣言
Dim ws As Worksheet
Dim tbl As ListObject
Dim rng As Range
' ワークシートを取得
Set ws = ThisWorkbook.Worksheets(1)
' テーブル(ListObject)を取得
Set tbl = ws.ListObjects(1)
' 商品カテゴリーを食品で絞り込み
tbl.DataBodyRange.AutoFilter 2, "食品"
End Sub
設定したオートフィルターを解除するコードは次の通り。
Sub CrearAutoFilter()
' 変数宣言
Dim ws As Worksheet
Dim tbl As ListObject
Dim rng As Range
' ワークシートを取得
Set ws = ThisWorkbook.Worksheets(1)
' テーブル(ListObject)を取得
Set tbl = ws.ListObjects(1)
' 商品カテゴリーのオートフィルターを解除
tbl.DataBodyRange.AutoFilter 2
End Sub
全オートフィルターを解除するコードは次の通り。.AutoFilter.ShowAllData
を使う。
Sub ShowAllData()
' 変数宣言
Dim ws As Worksheet
Dim tbl As ListObject
Dim rng As Range
' ワークシートを取得
Set ws = ThisWorkbook.Worksheets(1)
' テーブル(ListObject)を取得
Set tbl = ws.ListObjects(1)
' 全フィルターを解除
tbl.AutoFilter.ShowAllData
End Sub
この記事を書いた人
- ■人生を追求する凡人■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢■光学・機械系エンジニア(歴20年、内マネジメント10年、特許数件権利化)/副業フリーランスエンジニア■読書・文学愛好■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を研究。■VBAアプリ開発サービス提供中(業務委託 / VBA使用経験20年)■Python愛好(歴5年)■VBAエキスパート「Excel VBA スタンダード」(上級者向け資格)/ Python 3 エンジニア認定基礎(経済産業省「ITスキル標準(ITSS)」に掲載)