目次
概要
ワークシートにオートフィルターが設定されているか、さらに抽出条件が適用されているかを判定することで、処理分岐やユーザーへの注意喚起が容易になります。本記事では、AutoFilterMode と FilterMode の二つのプロパティを組み合わせ、現在のフィルター状態を確認するサンプルマクロを解説いたします。
前提条件
| 項目 | 内容 |
|---|---|
| 対応 Excel | Microsoft 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
コード解説
| 行 | 説明 |
|---|---|
| 4 | Set ws = ActiveSheet で判定対象をアクティブシートに設定しています。特定シートを固定したい場合はシート名を指定してください。 |
| 6 | AutoFilterMode が True であれば、見出し行にフィルター矢印が表示されている状態です。 |
| 7 | FilterMode が True の場合、フィルター条件が一つ以上設定され行が抽出されています。 |
| 8–12 | 判定結果に応じてメッセージボックスを表示し、ユーザーへ状態を知らせています。 |
応用例
| 目的 | 実装のヒント |
|---|---|
| 抽出中のみ処理を実行 | If ws.FilterMode Then … で条件を限定します。 |
| フィルターがなければ自動設定 | If Not ws.AutoFilterMode Then ws.Range("A1").AutoFilter のように追加実行します。 |
| メッセージを非表示で判定 | Boolean 型の戻り値として関数化し、メッセージを出さずに条件分岐へ利用可能です。 |
よくある質問
| 質問 | 回答 |
|---|---|
| テーブル(ListObject)の場合でも使えますか。 | テーブルは内部的にオートフィルターを保持しているため、同じプロパティで判定できます。 |
| 複数シートを一括判定したい場合は。 | For Each ws In Worksheets でループし、上記ロジックを適用してください。 |
まとめ
AutoFilterMode と FilterMode を組み合わせることで、フィルターそのものの有無と抽出状態を簡潔に判定できます。まずはサンプルコードを実行し、フィルターの設定状況に応じたメッセージが表示されることをご確認ください。業務マクロに組み込むことで、想定外の抽出状態による誤処理を防止できます。
技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。
気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。
