Excel VBA でシート内テーブル(ListObject)のフィルター状態を一括確認する方法

目次

概要

ワークシートに複数のテーブル(ListObject)が存在する場合、それぞれにフィルターが設定されているか、また抽出条件が適用されているかを瞬時に把握したいことがあります。本記事では、テーブルを走査し AutoFilter の状態を判定してメッセージ表示するマクロをご紹介いたします。誤抽出やフィルターの解除忘れを防止するチェック用ツールとしてご活用ください。


前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
判定対象アクティブシート上のすべてのテーブル(ListObject)
マクロ設置先標準モジュール

サンプルコード(VBA)

Sub CheckTableFilterStatus()

    Dim tbl As ListObject
    Dim msg As String
    
    For Each tbl In ActiveSheet.ListObjects
        
        ' AutoFilter プロパティが Nothing でない = フィルター行が存在
        If Not tbl.AutoFilter Is Nothing Then
            
            ' FilterMode = True のとき抽出条件が適用中
            If tbl.AutoFilter.FilterMode = True Then
                msg = tbl.Name & " ― 抽出条件が設定されています。"
            Else
                msg = tbl.Name & " ― フィルター行はありますが抽出は行われていません。"
            End If
        
        Else
            msg = tbl.Name & " ― フィルター未設定のテーブルです。"
        End If
        
        MsgBox msg, vbInformation, "Filter Check"
        
    Next tbl

End Sub

コードのポイント

説明
6ListObjects コレクションをループし、シート内のすべてのテーブルを対象にしています。
9AutoFilterNothing でなければ、テーブル見出しにフィルター矢印が存在します。
12FilterModeTrue のとき、何らかの列で抽出条件が適用されている状態です。
17MsgBox を用い、テーブルごとのフィルター状況をユーザーへ分かりやすく通知します。

応用例

要件実装のヒント
抽出中テーブルのみ一覧表示If tbl.AutoFilter.FilterMode Then … で条件を絞り、Debug.Print やシートへ追記します。
フィルターを自動解除If tbl.AutoFilter.FilterMode Then tbl.Range.AutoFilter として抽出条件を解除します。
特定シートを固定判定Set ws = Worksheets("Data") とし、ws.ListObjects をループします。

よくある質問

質問回答
テーブルが 1 つも無い場合はどうなりますか。ListObjects.Count が 0 のためループが実行されず、メッセージは表示されません。
フィルター行を非表示に戻したいときは。抽出解除後に tbl.ShowAutoFilter = False を実行すると矢印ごと非表示にできます。

まとめ

テーブルごとのフィルター状態を自動判定することで、抽出条件の確認・誤操作の防止が容易になります。まずはサンプルコードを実行し、各テーブルの状態がメッセージとして表示されることをご確認ください。業務シートに合わせてメッセージ内容や処理分岐を調整すれば、より高度なチェックツールとして活用できます。

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

この記事を書いた人

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

目次