Excel VBA で現在のフィルター条件を取得し一覧表示する方法【完全サンプルコード】

目次

概要

ワークシートに設定されているオートフィルターの 抽出条件(Criteria1/Criteria2) を取得し、列ごとにまとめて確認したい場合があります。今回ご紹介するマクロを実行すると、どの列にどの条件が設定されているかをメッセージボックスに一覧表示できます。設定ミスのチェックやログ取得にご活用ください。


サンプルコード(VBA)

Sub DisplayFilterConditions()

    Dim ws          As Worksheet        ' 対象シート
    Dim iCol        As Long             ' ループ用カウンター
    Dim infoMsg     As String           ' 条件一覧を格納する文字列
    
    Set ws = ActiveSheet                ' 必要に応じてシート名を指定
    
    If ws.AutoFilterMode = False Then
        MsgBox "このシートにはフィルターが設定されていません。", vbExclamation, "Filter Info"
        Exit Sub
    End If
    
    With ws.AutoFilter
        For iCol = 1 To .Filters.Count
            With .Filters(iCol)
                If .On = True Then                           ' 抽出が有効か判定
                    infoMsg = infoMsg & _
                              "列 " & iCol & " の抽出条件 : "
                    
                    If .Operator <> 0 Then                   ' AND / OR 条件の場合
                        infoMsg = infoMsg & _
                                  .Criteria1 & " と " & .Criteria2 & vbCrLf
                    Else                                     ' 単一条件の場合
                        infoMsg = infoMsg & .Criteria1 & vbCrLf
                    End If
                End If
            End With
        Next iCol
    End With
    
    If Len(infoMsg) = 0 Then
        infoMsg = "現在、抽出条件は設定されていません。"
    End If
    
    MsgBox infoMsg, vbInformation, "Filter Info"

End Sub

コード解説

説明
6Set ws = ActiveSheet で対象シートを設定しています。固定シートにしたい場合は Worksheets("SheetName") としてください。
8–11AutoFilterModeFalse の場合、フィルター行そのものが存在しないため処理を終了しています。
13ws.AutoFilter オブジェクトに対してループを実施し、各列の条件を取得しています。
15.OnTrue のとき、その列で抽出が実行されています。
18–22.Operator を判定し、AND/OR 条件(複数条件)の場合と単一条件の場合でメッセージを切り替えています。
27いずれの列にも条件が設定されていない場合のメッセージを設定しています。

応用ポイント

目的実装のヒント
条件一覧をセルに書き出すRange("G2").Value = infoMsg などでセルへ出力できます。
抽出条件に応じた処理分岐.Criteria1.Criteria2 を文字列比較し、特定条件が含まれるかどうかで分岐します。
解除忘れの自動通知条件が存在した場合に自動的に解除するか確認メッセージを出すように拡張できます。

よくある質問

質問回答
ListObject(テーブル形式)でも使用できますか。はい。テーブルに設定されたフィルターも ws.AutoFilter で取得できます。
日付の動的フィルター(今週、来月など)はどのように表示されますか。Criteria1 が内部コードで返るため、人間が読める表記に変換するには追加ロジックが必要です。

まとめ

本マクロを利用すると、フィルター条件の有無と内容を簡潔に一覧取得できます。大規模シートで複数列の条件を確認する際にたいへん便利ですので、ぜひ業務フローに取り入れてみてください。

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

この記事を書いた人

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

目次