Excel VBAでオートフィルターが存在する場合に削除する7つの方法
Microsoft Excelでは、ワークシートやテーブルからオートフィルターを削除する方法が複数用意されています。この記事では、VBAコードを使って、Excelでオートフィルターが存在する場合にそれを削除する7つの方法を解説します。
以下のリンクからサンプルのExcelファイルをダウンロードして、実際に手を動かしながら学習することもできます。
VBAでオートフィルターを削除する7つの具体例
1. アクティブなワークシートからオートフィルターを削除する
次のスクリーンショットは、アクティブなワークシートに適用されているオートフィルターです。これをVBAコードで削除していきます。

アクティブなワークシートからオートフィルターを削除したい場合は、以下の手順に従ってください。
❶ まず、ALT + F11キーを押してVBAエディターを開きます。
❷ 次に、挿入 >> 標準モジュールを選択します。

❸ 以下のVBAコードをコピーします。
Public Sub RemoveAFActiveWorksheet()
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
End Sub
❹ コードをVBAエディターに貼り付けて保存します。

コードの解説
- まず、Public Sub RemoveAFActiveWorksheetというSubプロシージャを作成しています。
- 次に、Ifステートメントでオートフィルターが存在するかどうかを判定し、存在する場合はAutoFilterModeをFalseに設定して削除します。
❺ ワークシートに戻り、ALT + F8キーを押してマクロダイアログボックスを開きます。
❻ マクロ「RemoveAFActiveWorksheet」を選択し、「実行」ボタンをクリックします。

すると、オートフィルターが削除され、すべてのデータが表示されるようになります。

関連記事: Excel VBAでオートフィルターが有効かどうかを確認する方法(4つの簡単な方法)
2. ブック内のすべてのワークシートからオートフィルターを削除する
下の画像を見ると、両方のワークシートにオートフィルターが適用されていることがわかります。ここでは、ブック内のすべてのワークシートからオートフィルターを一括で削除するVBAコードを作成します。

ブック内のすべてのワークシートからオートフィルターを削除するには、以下の手順に従います。
❶ まず、ALT + F11キーを押してVBAエディターを開きます。
❷ 次に、挿入 >> 標準モジュールを選択します。

❸ 以下のVBAコードをコピーします。
Public Sub DeleteAFfromallWorksheets()
Dim xWs1 As Worksheet
For Each xWs1 In ActiveWorkbook.Worksheets
If xWs1.AutoFilterMode = True Then
xWs1.AutoFilterMode = False
End If
Next xWs1
End Sub
❹ コードをVBAエディターに貼り付けて保存します。

コードの解説
- For Eachループを使用して、各ワークシートにオートフィルターが設定されているかどうかを順番に確認しています。
- 次に、Ifステートメントでオートフィルターの存在をチェックし、存在する場合はAutoFilterModeをFalseに設定して削除します。
❺ ワークシートに戻り、ALT + F8キーを押してマクロダイアログボックスを開きます。
❻ マクロ「DeleteAFfromallWorksheets」を選択し、「実行」ボタンをクリックします。

実行後は、下の画像のようにブック内のすべてのワークシートからオートフィルターのアイコンが削除されます。

3. テーブルの単一列からオートフィルターをクリアする
下の画像では、テーブルの最初の列のみにオートフィルターが適用されています。この方法では、テーブルの特定の1列だけからオートフィルターを解除するコードを作成します。

手順は以下の通りです。
❶ まず、ALT + F11キーを押してVBAエディターを開きます。
❷ 次に、挿入 >> 標準モジュールを選択します。

❸ 以下のVBAコードをコピーします。
Sub DeleteAFSingleColumnfromTable()
Dim xWs1 As Worksheet
Dim xTableName1 As String
Dim xLT1 As ListObject
xTableName1 = "TableA"
Set xWs1 = Sheets("MyTable1")
Set xLT1 = xWs1.ListObjects(xTableName1)
xLT1.Range.AutoFilter Field:=1
End Sub
❹ コードをVBAエディターに貼り付けて保存します。

コードの解説
- まず、3つの変数を宣言しています。
- 次に、テーブル名を指定し、シート名をSetステートメントで設定しています。
- その後、ListObjectsプロパティを使用してテーブルの全内容を操作対象として取得しています。
- 最後に、AutoFilter Field引数にテーブルの列インデックスを指定しています。
❺ ワークシートに戻り、ALT + F8キーを押してマクロダイアログボックスを開きます。
❻ マクロ「DeleteAFSingleColumnfromTable」を選択し、「実行」ボタンをクリックします。

実行後、テーブルの最初の列からオートフィルターが消えていることが確認できます。

4. テーブルの複数列からオートフィルターを削除する
下の画像では、テーブルの1列目と2列目にオートフィルターのアイコンが表示されています。この方法を使えば、テーブルの複数の列からVBAでオートフィルターを削除できます。

Excelテーブルの複数列からオートフィルターを解除するには、以下の手順に従ってください。
❶ まず、ALT + F11キーを押してVBAエディターを開きます。
❷ 次に、挿入 >> 標準モジュールを選択します。

❸ 以下のVBAコードをコピーします。
Sub DeleteAFMultiColumnsfromTable()
Dim xWs1 As Worksheet
Dim xTableName1 As String
Dim xLT1 As ListObject
xTableName1 = "TableA"
Set xWs1 = Sheets("MyTable1")
Set xLT1 = xWs1.ListObjects(xTableName1)
xLT1.Range.AutoFilter Field:=1
xLT1.Range.AutoFilter Field:=2
End Sub
❹ コードをVBAエディターに貼り付けて保存します。

コードの解説
- まず、3つの変数を宣言しています。
- 次に、テーブル名を指定し、シート名をSetステートメントで設定しています。
- その後、ListObjectsプロパティを使用してテーブルの全内容を操作対象として取得しています。
- 最後に、AutoFilter Field引数に2つの列インデックスを指定しています。
❺ ワークシートに戻り、ALT + F8キーを押してマクロダイアログボックスを開きます。
❻ マクロ「DeleteAFMultiColumnsfromTable」を選択し、「実行」ボタンをクリックします。

コードを実行すると、複数の列からオートフィルターが削除されます。

関連記事: [解決法] RangeクラスのAutoFilterメソッドが失敗するエラーへの対処法(5つの解決策)
5. テーブル全体からオートフィルターをクリアする
下の画像のようにテーブル全体にオートフィルターが適用されており、それらをすべて削除したい場合は、この方法を試してみてください。

❶ まず、ALT + F11キーを押してVBAエディターを開きます。
❷ 次に、挿入 >> 標準モジュールを選択します。

❸ 以下のVBAコードをコピーします。
Sub RemoveAFfromEntireTable()
Dim xWs1 As Worksheet
Dim xTable1 As String
Dim xTable2 As ListObject
xTable1 = "TableB"
Set xWs1 = ActiveSheet
Set xTable2 = xWs1.ListObjects(xTable1)
xTable2.AutoFilter.ShowAllData
End Sub
❹ コードをVBAエディターに貼り付けて保存します。

コードの解説
- まず、3つの変数を宣言しています。
- 次に、テーブル名を指定し、シート名としてActiveSheetを設定しています。
- その後、ListObjectsプロパティでテーブルの全内容を取得し、Setステートメントで変数xTable2に格納しています。
- 最後に、ShowAllDataメソッドを使用してオートフィルターによる絞り込みを解除しています。
❺ テーブルがあるワークシートに戻り、ALT + F8キーを押してマクロダイアログボックスを開きます。
❻ マクロ「RemoveAFfromEntireTable」を選択し、「実行」ボタンをクリックします。

これで、下の画像のようにテーブル全体からオートフィルターが削除されます。

6. パスワードで保護されたワークシートからオートフィルターを削除する
下の画像のデータセットにはオートフィルターが有効になっており、さらにパスワード(7878)で保護されています。
この方法では、このようなパスワード保護されたワークシートからオートフィルターを解除するVBAコードをご紹介します。

以下の手順に従ってください。
❶ まず、ALT + F11キーを押してVBAエディターを開きます。
❷ 次に、挿入 >> 標準モジュールを選択します。

❸ 以下のVBAコードをコピーします。
Sub RemoveAFwithPass()
Dim UserPwd As String
UserPwd = "7878"
With ActiveSheet
.Unprotect Password:=UserPwd
.ShowAllData
.Protect _
Contents:=True, _
AllowFiltering:=True, _
UserInterfaceOnly:=True, _
Password:=UserPwd
End With
End Sub
❹ コードをVBAエディターに貼り付けて保存します。

コードの解説
- まず、変数を宣言し、パスワードを設定しています。
- 次に、ActiveSheetに対して、Unprotect Passwordにユーザーパスワードを割り当てて保護を解除しています。
- ShowAllDataメソッドですべての非表示データを表示させています。
- 最後に、Contents・AllowFiltering・UserInterfaceOnlyにTrueを設定して再びシートを保護しています。
❺ パスワード保護されたワークシートに戻り、ALT + F8キーを押してマクロダイアログボックスを開きます。
❻ マクロ「RemoveAFwithPass」を選択し、「実行」ボタンをクリックします。

実行後は、オートフィルターが解除され、下のようにすべてのレコードが表示されます。

7. パスワードなしの保護されたワークシートからオートフィルターを削除する
下の画像は、パスワードなしで保護されたデータセットです。この方法では、パスワード未設定の保護されたワークシートからオートフィルターを削除するコードを作成します。

以下の手順に従ってください。
❶ まず、ALT + F11キーを押してVBAエディターを開きます。
❷ 次に、挿入 >> 標準モジュールを選択します。

❸ 以下のVBAコードをコピーします。
Sub RemoveAFwithoutPass()
With ActiveSheet
.Unprotect
.ShowAllData
.Protect _
Contents:=True, _
AllowFiltering:=True, _
UserInterfaceOnly:=True
End With
End Sub
❹ コードをVBAエディターに貼り付けて保存します。

コードの解説
- まず、WithステートメントをActiveSheetに適用し、Unprotectメソッドでシートの保護を解除しています。
- 次に、ShowAllDataメソッドですべての非表示データを表示させています。
- 最後に、Contents・AllowFiltering・UserInterfaceOnlyにTrueを設定して再びシートを保護しています。
❺ ワークシートに戻り、ALT + F8キーを押してマクロダイアログボックスを開きます。
❻ マクロ「RemoveAFwithoutPass」を選択し、「実行」ボタンをクリックします。

最終的に、オートフィルターがクリアされ、下のようにすべてのデータが表示されるようになります。

練習セクション
配布しているExcelファイルの末尾には、下のスクリーンショットのような練習用シートが含まれています。この記事で紹介したすべての方法を、実際に試しながら学ぶことができます。

まとめ
今回は、ExcelのVBAを使ってオートフィルターが存在する場合にそれを削除する7つの方法について解説しました。ぜひ、記事に添付されている練習用ワークブックをダウンロードして、すべての方法を実際に試してみてください。ご質問がある場合は、下のコメント欄でお気軽にお尋ねください。できる限り早くお答えいたします。また、弊社サイトExceldemyもぜひご覧ください。
関連記事
- Excel VBAで同一フィールドに複数条件を指定してオートフィルターをかける方法(4つ)
- Excel VBAで特定の値以外をオートフィルターで抽出する方法
- VBAオートフィルター:昇順(小さい順)に並べ替える方法(3つ)
- Excel VBAでオートフィルターを適用して表示中の行をコピーする方法
-
【Excel VBA】特定の値以外のデータを抽出する2つの方法|ワークシート全体・範囲指定に対応
この記事では、ExcelのVBAを使って、特定の値「以外」のデータを抽出する方法を詳しく解説します。ワークシート全体から抽出する方法と、特定のセル範囲だけを対象に抽出する方法の2パターンを、サンプルコード付きでわかりやすくご紹介します。 完成版コード(ワークシート全体から抽出する場合) Sub Autofilter_Values_from_Whole_Worksheet() Source_Worksheet = Sheet1 Destination_Worksheet = Sheet2 Dim Filtered_Columns() As Variant Filtered_Columns =
-
Excelで不明なリンクを削除する方法(4つの実例で解説)
複数のExcelファイル間でデータを共有する際、ファイル同士をリンクでつなぐことがあります。しかし、意図しない「不明なリンク」がファイル内に残ってしまうケースも少なくありません。この記事では、Excelに存在する不明なリンクやその他の外部リンクを検出し、削除する方法を具体的な手順とともにわかりやすく解説します。 Excelで不明なリンクを削除する4つの方法 サンプルデータセットでは、セルD5とD9の2か所に外部リンクが存在しています。ここでは、それらの外部リンクを特定し、削除するまでの手順を順番に説明していきます。 1. セルから不明なリンクを削除する Excelのリンクにはさまざまな形があ