【解決策】Excel VBAで「RangeクラスのAutoFilterメソッドが失敗しました」エラーが出る原因と5つの修正方法
Excel VBAでマクロを実行した際に「RangeクラスのAutoFilterメソッドが失敗しました(AutoFilter method of Range Class Failed)」というエラーメッセージに悩まされていませんか?この記事では、このエラーが発生する主な原因と、具体的な解決策を5つわかりやすく解説します。ぜひ最後までご覧ください。
5つの解決策:AutoFilterメソッドのエラーを修正する
ここでは、以下のようなデータセットを例に、AutoFilter機能を使って特定の条件でデータを絞り込むシーンを想定し、5つの解決策を順番に紹介していきます。

本記事ではMicrosoft Excel 365を使用していますが、お使いのバージョンに合わせて操作してください。
解決策1:フィールド番号を正しく指定する
まずは、VBAコードを使って売上(Sales)の値が2500以上の行だけを抽出してみましょう。

フィルターをかけるために、次のようなコードを使用しました。
Sub fixing_autofilter_issue_1()
Dim sht As Worksheet
Set sht = Worksheets("Field Number")
sht.Range("B3:D3").AutoFilter field:=100, Criteria1:=">=2500"
End Sub
ここでfield:は、範囲内の列番号を指定する引数です。しかし、このコードでは存在しない100という列番号を指定しています。実際の範囲には3列しかありません。

そのため、F5キーで実行すると、「RangeクラスのAutoFilterメソッドが失敗しました」というエラーが発生します。

➤ この問題を解決するには、範囲内の実際の列番号に対応したフィールド番号を指定します。今回はSales列は範囲内の3列目なので、3を指定します。
Sub fixing_autofilter_issue_1()
Dim sht As Worksheet
Set sht = Worksheets("Field Number")
sht.Range("B3:D3").AutoFilter field:=3, Criteria1:=">=2500"
End Sub

➤ F5キーを押して実行します。
これで、エラーが出ることなく条件どおりにデータを絞り込めるようになります。

解決策2:正しい範囲(Range)を指定する
次に、Sales列の値が$2,500.00以上のデータを抽出するケースを見てみましょう。

「Range」シートに対してフィルターを適用するため、次のコードを使用しました。
Sub fixing_autofilter_issue_2()
Dim sht As Worksheet
Set sht = Worksheets("Range")
sht.Range("D3:D100").AutoFilter field:=3, Criteria1:=">=2500"
End Sub
一見問題なさそうに見えますが、範囲としてD3:D100を指定しながらフィールド番号には3を設定しています。この範囲は1列しかないため、フィールド番号と一致せず矛盾が生じています。

そのため、F5キーを押すと再び同じエラーメッセージが表示されます。

➤ コードを次のように修正します。
Sub fixing_autofilter_issue_2()
Dim sht As Worksheet
Set sht = Worksheets("Range")
sht.Range("B3:D3").AutoFilter field:=3, Criteria1:=">=2500"
End Sub
範囲をB3:D3に変更しました。これで3つの列を含むヘッダー行が範囲となり、フィールド番号3との整合性が取れます。

➤ F5キーを押して実行します。
これで、エラーなしで条件に合ったデータを絞り込めるようになります。

解決策3:テーブルに対するフィルター処理によるエラーへの対処
Excelのテーブル機能を使ったデータに対して、VBAでAutoFilterメソッドを適用すると、エラーが発生することがあります。ここでは、Sales列を基準にテーブルを絞り込むコードを実行してみます。

使用したコードは以下のとおりです。
Sub fixing_autofilter_issue_3()
Dim sht As Worksheet
Set sht = Worksheets("Table")
sht.Range("B3:D3").AutoFilter field:=3, Criteria1:=">=2500"
End Sub
コード自体は正しく見えます。実際に実行してみましょう。

しかし、F5キーを押すと、やはりエラーメッセージが表示されます。これは、対象が通常のセル範囲ではなくテーブルであることが原因です。

➤ この問題を解決するには、テーブルを通常の範囲に変換します。テーブルを選択し、テーブルデザインタブ >> ツールグループ >> 範囲に変換をクリックします。

➤ 変換を確認するメッセージボックスが表示されるので、はいをクリックします。

これで、テーブルが通常のセル範囲に変換されました。

➤ それでは、先ほどと同じコードをもう一度実行してみましょう。
Sub fixing_autofilter_issue_3()
Dim sht As Worksheet
Set sht = Worksheets("Table")
sht.Range("B3:D3").AutoFilter field:=3, Criteria1:=">=2500"
End Sub

➤ F5キーを押して実行します。
今度はAutoFilterメソッドが正常に動作し、エラーなくデータを絞り込めました。

解決策4:ピボットテーブルに対するフィルター処理によるエラーへの対処
続いて、ピボットテーブルに対してAutoFilterメソッドを適用するケースです。以下のピボットテーブルでは、2列目に売上の値があり、これを基準に絞り込みを行います。

そこで、次のようなコードを実行しました。
Sub fixing_autofilter_issue_4()
Dim sht As Worksheet
Set sht = Worksheets("Pivot")
sht.Range("A3:B3").AutoFilter field:=2, Criteria1:=">=2500"
End Sub
フィールド番号2は、範囲A3:B3の2列目(売上列)を指しています。

しかし、F5キーを押すと、「RangeクラスのAutoFilterメソッドが失敗しました」というエラーが発生します。ピボットテーブルには直接AutoFilterメソッドを適用できないためです。

➤ 解決策としては、ピボットテーブルの元データ(ソース範囲)に対してAutoFilterメソッドを適用します。このピボットテーブルの元データは「Source」シートにあるので、そちらに対してコードを実行します。

➤ 元データの範囲に対して、次のコードを適用します。
Sub fixing_autofilter_issue_4_1()
Dim sht As Worksheet
Set sht = Worksheets("Source")
sht.Range("B3:D3").AutoFilter field:=3, Criteria1:=">=2500"
End Sub

➤ F5キーを押して実行します。
これで、Sales列を基準に条件どおりにデータを絞り込めるようになります。

解決策5:範囲全体ではなくヘッダー行のみを指定する
最後に、あまり知られていないものの、エラーの原因になりうるポイントを紹介します。それは、データ全体ではなくヘッダー行のみを範囲として指定するという書き方に関するものです。
これまでの例と同様に、次の範囲に対してAutoFilterメソッドを適用してみます。

使用したコードは以下のとおりです。
Sub fixing_autofilter_issue_5()
Dim sht As Worksheet
Set sht = Worksheets("Header")
sht.Range("B3:D11").AutoFilter field:=3, Criteria1:=">=2500"
End Sub
ここではデータ全体を表す範囲B3:D11を指定していますが、これは必須ではありません。特に大規模なデータの場合、範囲全体を指定するとエラーの原因になることがあります。

➤ そこで、範囲をヘッダー行のみに限定して、コードを次のように書き換えます。
Sub fixing_autofilter_issue_5()
Dim sht As Worksheet
Set sht = Worksheets("Header")
sht.Range("B3:D3").AutoFilter field:=3, Criteria1:=">=2500"
End Sub

➤ F5キーを押して実行します。
問題なく、希望どおりの結果が得られました。

まとめ
この記事では、Excelで「RangeクラスのAutoFilterメソッドが失敗しました」エラーが発生する主な原因と、その5つの解決策を解説しました。フィールド番号の確認、範囲指定の見直し、テーブルやピボットテーブルへの対応など、状況に応じた対処法を試してみてください。ご不明な点やご意見があれば、ぜひコメント欄でお聞かせください。
関連記事
- Excel VBAでオートフィルターをかけて可視行をコピーする方法
- VBAオートフィルター:昇順(小さい順)に並べ替える3つの方法
- Excel VBAで特定の値以外をオートフィルターで抽出する方法
- Excel VBA:オートフィルターが存在する場合に解除する7つの例
-
【解決法】VJoyのインストールに失敗する原因と8つの対処法
VJoyのインストールに失敗する主な原因は、ドライバー署名の強制設定が正しくないことです。また、WindowsやVJoy自体のインストールが破損している場合にも、このエラーが発生することがあります。アプリケーションの更新中に問題が発生したという報告もあります。この問題は、Windows XP以降のほぼすべてのバージョンのWindowsで確認されています。トラブルシューティングを始める前に、以下の点を確認してください。ローカルディスクからインストールしていること(USBメモリや外付けディスクからはインストールしない)。また、ジョイスティック、ゲームパッド、ステアリングホイールなどのゲームコントロ
-
【解決策】VKEnumeratePhysicalDevices Failed(VK_Error_Initialization_Failed)エラーの直し方
Windowsユーザーの一部で、Vulkan APIを使用するゲームを起動しようとした際に、「VKEnumeratePhysicalDevices Failed with Error(VK_Error_Initialization_Failed)」という致命的なエラーが発生するケースが報告されています。特に多いのは、BethesdaがリリースしたWolfensteinシリーズやDOOMシリーズなどのタイトルです。このエラーに遭遇した場合は、まずお使いのGPUがVulkanに対応しているかどうかを確認しましょう。一般的に、2018年以降に発売されたGPUはほぼすべてVulkan APIをサポート