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
コードのポイント
行
説明
6
ListObjects コレクションをループし、シート内のすべてのテーブルを対象にしています。
9
AutoFilter が Nothing でなければ、テーブル見出しにフィルター矢印が存在します。
12
FilterMode が True のとき、何らかの列で抽出条件が適用されている状態です。
17
MsgBox を用い、テーブルごとのフィルター状況をユーザーへ分かりやすく通知します。
応用例
要件
実装のヒント
抽出中テーブルのみ一覧表示
If tbl.AutoFilter.FilterMode Then … で条件を絞り、Debug.Print やシートへ追記します。
フィルターを自動解除
If tbl.AutoFilter.FilterMode Then tbl.Range.AutoFilter として抽出条件を解除します。
特定シートを固定判定
Set ws = Worksheets("Data") とし、ws.ListObjects をループします。