Excel VBA でシートのフィルター状態を判定する方法【抽出有無をメッセージで通知】

目次

概要

ワークシートにオートフィルターが設定されているか、さらに抽出条件が適用されているかを判定することで、処理分岐やユーザーへの注意喚起が容易になります。本記事では、AutoFilterModeFilterMode の二つのプロパティを組み合わせ、現在のフィルター状態を確認するサンプルマクロを解説いたします。


前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
対象ワークシートアクティブシート(必要に応じてシート名を指定可)
マクロ設置先標準モジュール

サンプルコード(VBA)

Sub CheckFilterStatus()

    Dim ws As Worksheet         ' 判定対象シート
    Set ws = ActiveSheet        ' 必要に応じて Worksheets("Sheet1") などに変更
    
    If ws.AutoFilterMode = True Then                ' フィルター見出しが存在
        If ws.FilterMode = True Then                ' 抽出条件が適用中
            MsgBox "現在、データが抽出されています。", vbInformation
        Else
            MsgBox "フィルターは設定されていますが、抽出条件は適用されていません。", vbInformation
        End If
    Else
        MsgBox "このシートにはフィルターが設定されていません。", vbExclamation
    End If

End Sub

コード解説

説明
4Set ws = ActiveSheet で判定対象をアクティブシートに設定しています。特定シートを固定したい場合はシート名を指定してください。
6AutoFilterModeTrue であれば、見出し行にフィルター矢印が表示されている状態です。
7FilterModeTrue の場合、フィルター条件が一つ以上設定され行が抽出されています。
8–12判定結果に応じてメッセージボックスを表示し、ユーザーへ状態を知らせています。

応用例

目的実装のヒント
抽出中のみ処理を実行If ws.FilterMode Then … で条件を限定します。
フィルターがなければ自動設定If Not ws.AutoFilterMode Then ws.Range("A1").AutoFilter のように追加実行します。
メッセージを非表示で判定Boolean 型の戻り値として関数化し、メッセージを出さずに条件分岐へ利用可能です。

よくある質問

質問回答
テーブル(ListObject)の場合でも使えますか。テーブルは内部的にオートフィルターを保持しているため、同じプロパティで判定できます。
複数シートを一括判定したい場合は。For Each ws In Worksheets でループし、上記ロジックを適用してください。

まとめ

AutoFilterModeFilterMode を組み合わせることで、フィルターそのものの有無と抽出状態を簡潔に判定できます。まずはサンプルコードを実行し、フィルターの設定状況に応じたメッセージが表示されることをご確認ください。業務マクロに組み込むことで、想定外の抽出状態による誤処理を防止できます。

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

この記事を書いた人

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

目次