目次
概要
ワークシートに設定されているオートフィルターの 抽出条件(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
コード解説
行 | 説明 |
---|---|
6 | Set ws = ActiveSheet で対象シートを設定しています。固定シートにしたい場合は Worksheets("SheetName") としてください。 |
8–11 | AutoFilterMode が False の場合、フィルター行そのものが存在しないため処理を終了しています。 |
13 | ws.AutoFilter オブジェクトに対してループを実施し、各列の条件を取得しています。 |
15 | .On が True のとき、その列で抽出が実行されています。 |
18–22 | .Operator を判定し、AND/OR 条件(複数条件)の場合と単一条件の場合でメッセージを切り替えています。 |
27 | いずれの列にも条件が設定されていない場合のメッセージを設定しています。 |
応用ポイント
目的 | 実装のヒント |
---|---|
条件一覧をセルに書き出す | Range("G2").Value = infoMsg などでセルへ出力できます。 |
抽出条件に応じた処理分岐 | .Criteria1 や .Criteria2 を文字列比較し、特定条件が含まれるかどうかで分岐します。 |
解除忘れの自動通知 | 条件が存在した場合に自動的に解除するか確認メッセージを出すように拡張できます。 |
よくある質問
質問 | 回答 |
---|---|
ListObject(テーブル形式)でも使用できますか。 | はい。テーブルに設定されたフィルターも ws.AutoFilter で取得できます。 |
日付の動的フィルター(今週、来月など)はどのように表示されますか。 | Criteria1 が内部コードで返るため、人間が読める表記に変換するには追加ロジックが必要です。 |
まとめ
本マクロを利用すると、フィルター条件の有無と内容を簡潔に一覧取得できます。大規模シートで複数列の条件を確認する際にたいへん便利ですので、ぜひ業務フローに取り入れてみてください。