Excel VBAでオートフィルタがオンになっているか確認する4つの簡単な方法
Excelのオートフィルタ(AutoFilter)機能は、特定の条件に基づいてデータを抽出する際に非常に便利なツールです。しかし、技術的な問題によってオートフィルタが非表示になったり、実際にはフィルタが適用されていないのにExcelが適用されていると表示されたりすることがあります。こうした場合、ワークシートでオートフィルタが有効になっているかどうかを目視だけで判断するのは困難です。VBAを活用すれば、Excel上のあらゆる操作を最も効率的かつ迅速・安全に実行できます。本記事では、VBAマクロを使用してExcelでオートフィルタがオンになっているかを確認する4つの簡単な方法をわかりやすく解説します。
練習用ワークブックのダウンロード
本記事で使用する練習用Excelワークブックは、こちらから無料でダウンロードできます。
VBAでオートフィルタのオン/オフを確認する4つの方法
このセクションでは、VBAを使ってExcelのオートフィルタがオンになっているかを確認する4つの異なる方法を学びます。

上記は、本記事の手順説明に使用するサンプルデータセットです。
1. ワークシートのオートフィルタがオンかオフかをVBAで確認する
まずは、VBAを使ってExcelワークシートのオートフィルタがオンになっているかどうかを確認する方法をご紹介します。以下の手順に従って実行してください。
手順:
- まず、キーボードでAlt + F11を押すか、リボンの開発 → Visual Basicを選択してVisual Basic Editor(VBE)を開きます。

- 次に、表示されたコードウィンドウのメニューバーから挿入 → 標準モジュールをクリックします。

- 続いて、以下のコードをコピーしてコードウィンドウに貼り付けます。
Sub AutoFilterCheck()
If ActiveSheet.AutoFilterMode = True Then
MsgBox "Auto Filter is turned on"
Else
MsgBox "Auto Filter is turned off"
End If
End Sub
これでコードを実行する準備が整いました。

- キーボードのF5キーを押すか、メニューバーから実行 → Sub/ユーザーフォームの実行を選択してマクロを実行します。サブメニューバーの小さな実行アイコンをクリックしても構いません。

コードが正常に実行されると、下の画像のような結果が表示されます。

上の画像を見てください。データセットにはフィルタ矢印が表示されていないにもかかわらず、ExcelのMsgBox(メッセージボックス)は「このシートでオートフィルタがオンになっている」と伝えています。
操作の状態が不確かなシナリオでは、VBAの活用が非常に便利です。目で見て確認できない情報でも、VBAマクロを使えば正確な結果を取得できます。
VBAコードの解説
If ActiveSheet.AutoFilterMode = True Then
MsgBox "Auto Filter is turned on"
Else
MsgBox "Auto Filter is turned off"
End If
このコードは、アクティブシートのオートフィルタモードがTrueの場合、ExcelのMsgBoxに「Auto Filter is turned on(オートフィルタはオン)」というメッセージを返します。そうでない場合は、「Auto Filter is turned off(オートフィルタはオフ)」というメッセージを表示します。
関連記事: Excel VBA: オートフィルタが存在する場合に削除する方法(7つの方法)
2. VBAコードをデバッグしてアクティブシートのオートフィルタ数を取得する
このセクションでは、コードをデバッグしてExcelシート内のオートフィルタの数をカウントする方法を解説します。コードを実行すると、結果がExcel VBAのイミディエイトウィンドウに出力されます。
手順は以下の通りです。
手順:
- 前のセクションと同様に、開発タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- その後、以下のコードをコピーしてコードウィンドウに貼り付けます。
Sub CountAutoFilters()
Dim iCount As Long
If ActiveSheet.AutoFilterMode = True Then iCount = 1
Debug.Print "AutoFilterMode Count: " & iCount
End Sub
これでコードを実行する準備が整いました。

- その後、前のセクションで説明した方法でマクロを実行します。結果は下の画像の通りです。

上の画像のように、イミディエイトウィンドウにワークシート内で有効になっているオートフィルタの合計数が表示されます。
VBAコードの解説
Dim iCount As Long
変数を宣言しています。
If ActiveSheet.AutoFilterMode = True Then iCount = 1
Debug.Print "AutoFilterMode Count: " & iCount
この2行のコードは、アクティブシートのオートフィルタモードがTrueの場合にカウントを開始し、合計数を出力することを意味します。
関連記事: Excel VBAで同一フィールドに複数条件を指定してオートフィルタを適用する方法(4つの方法)
3. 特定の列がフィルタされているかどうかをVBAで確認する
次に、VBAを使ってExcelスプレッドシート内の特定の列がフィルタされているかどうかを確認する方法を見ていきましょう。
具体的な手順は以下の通りです。
手順:
- 前述の方法と同じく、開発タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- 続いて、以下のコードをコピーしてコードウィンドウに貼り付けます。
Sub CheckColumnFilter()
Dim iSheet As Worksheet
Set iSheet = ActiveSheet
If iSheet.AutoFilter.Filters(2).On Then
MsgBox "Column B is filtered."
Else
MsgBox "Column B is not filtered."
End If
End Sub
これでコードを実行する準備が整いました。

- その後、マクロを実行し、下の画像で出力結果を確認してください。

上の画像をご覧ください。B列にはフィルタ矢印が見えるにもかかわらず、マクロはフィルタされていないと通知しています。つまり、コードが正常に実行された結果、B列はオートフィルタされていないことがわかります。
VBAコードの解説
Dim iSheet As Worksheet
ワークシート用の変数を宣言しています。
Set iSheet = ActiveSheet
宣言した変数にアクティブシートを格納しています。
If iSheet.AutoFilter.Filters(2).On Then
MsgBox "Column B is filtered."
Else
MsgBox "Column B is not filtered."
End If
このコードは、アクティブシートの2番目の列(B列)のオートフィルタがTrueの場合、ExcelのMsgBoxに「Column B is filtered.(B列はフィルタされています)」というメッセージを返します。そうでない場合は、「Column B is not filtered.(B列はフィルタされていません)」というメッセージを表示します。
関連記事: Excel VBAで特定の値以外をオートフィルタする方法
4. Excelワークブック内のオートフィルタが有効かどうかを確認するVBAマクロ
このセクションでは、特定のExcelワークブック内のシートについて、オートフィルタが有効か無効かを確認する方法を学びます。
手順は以下の通りです。
手順:
- まず、開発タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- 続いて、以下のコードをコピーしてコードウィンドウに貼り付けます。
Sub CheckAutofilterSheet()
Dim z As Double
For z = 1 To ThisWorkbook.Sheets.Count
If ThisWorkbook.Sheets(z).AutoFilterMode Then
MsgBox ThisWorkbook.Sheets(z).Name & " has enabled Autofilter"
End If
Next
End Sub
これでコードを実行する準備が整いました。

- 次に、マクロを実行し、下の画像で結果を確認してください。

上の画像のように、このワークブックには「Dataset」という名前のワークシートがあります。ExcelのMsgBoxは「Datasetシートでオートフィルタがオンになっている」ことを示しています。このコードは、特定のExcelワークブック内のすべてのスプレッドシートに対して実行できます。
VBAコードの解説
Dim z As Double
変数を宣言しています。
For z = 1 To ThisWorkbook.Sheets.Count
既存のワークブックの1枚目のシートから合計シート数まで、ループ処理を開始します。
If ThisWorkbook.Sheets(z).AutoFilterMode Then
MsgBox ThisWorkbook.Sheets(z).Name & " has enabled Autofilter"
End If
Next
最初のシートでオートフィルタモードがオンの場合、MsgBoxにメッセージを表示します。その後、コードは条件を終了し、次のシートへ移動して反復処理を続けます。この処理は、現在のワークブックの全シート数に達するまで繰り返されます。
関連記事: Excel VBAでオートフィルタを適用して可視行をコピーする方法
まとめ
本記事では、VBAマクロを使用してExcelのオートフィルタがオンになっているかを確認する4つの簡単で迅速な方法をご紹介しました。ワークシート単位の確認から、フィルタ数のカウント、特定列の判定、ブック全体の一括チェックまで、目的に応じて使い分けることで、日々のデータ管理作業をより確実に行えます。この記事が皆様のお役に立てば幸いです。トピックに関するご質問があれば、お気軽にお問い合わせください。
関連記事
- [修正方法]: RangeクラスのAutoFilterメソッドが失敗する問題(5つの解決策)
- VBAオートフィルタ: 小さい値から大きい値へ並べ替える(3つの方法)
-
Excelで階層を作成する3つの簡単な方法|SmartArt・ピボットテーブル・Power Pivot
Excelにおける「階層(ヒエラルキー)」には、大きく分けて2つの意味があります。1つ目は、組織図のように階層構造を視覚的に表現するためのチャートのことです。もう1つはPower Pivotの階層機能で、こちらは表の中にネストされた複数の列をまとめ、ワンクリックでドリルダウン(展開)やドリルアップ(折りたたみ)を素早く行えるようにするものです。 この記事では、Excelで階層を作成する3つの方法を、手順付きでわかりやすく解説します。 Excelで階層を作成する3つの便利な方法 本記事では、Excelで階層を作成する3つの簡単な方法をご紹介します。まずSmartArt機能を使った視
-
Excelでアンケートを作成する2つの簡単な方法【手動入力とVBA】
この記事では、Excelでアンケート(質問票)を作成する方法を解説します。アンケートとは、質問や特定の項目に対して選択肢を設け、回答者から情報を収集するためのツールです。Excelを使えば、いくつかの簡単な手順だけで誰でもアンケートを作成できます。本記事では2つの簡単な方法をご紹介します。これらの方法をマスターすれば、Excelでのアンケート作成がぐっと楽になります。それでは早速始めましょう。 練習用ワークブックはこちらからダウンロードできます。 Excelでアンケートを作成する2つの方法 Excelでアンケートを作成するには、主に2つの方法があります。 1つ目の方法は、手動でアンケートを作成