엑셀 VBA 코드를 실행할 때 'AutoFilter 메서드가 실패했습니다(AutoFilter method of Range Class Failed)'라는 오류 메시지를 마주하고 그 원인과 해결책을 찾고 계신가요? 이 글에서는 해당 오류가 발생하는 대표적인 상황과 이를 해결하는 5가지 방법을 실제 예제와 함께 자세히 설명합니다.
오류의 주요 원인
AutoFilter 메서드가 실패했습니다 오류는 주로 다음과 같은 경우에 발생합니다.
- 코드에서 지정한 필드(field) 번호가 범위 내 실제 열 개수와 일치하지 않을 때
- AutoFilter 범위(Range)를 잘못 설정했을 때
- 표(Table)나 피벗 테이블(Pivot Table)에 직접 AutoFilter 메서드를 적용하려 할 때
- 헤더 행이 아닌 전체 데이터 범위에 필터를 적용했을 때
예제 데이터셋 소개
아래에서는 다음 데이터셋을 기준으로 특정 조건(매출액 기준)에 따라 범위를 필터링하는 AutoFilter 기능을 적용하며, 각 오류 상황별로 5가지 해결 방법을 하나씩 살펴봅니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116513946.png)
본 글은 Microsoft Excel 365 버전을 기준으로 작성되었지만, 사용 중인 다른 버전에서도 동일하게 적용할 수 있습니다.
방법 1. 올바른 필드(Field) 번호 지정하기
VBA 코드를 활용해 아래 범위에서 매출(Sales) 값이 2500 이상인 행만 필터링해 보겠습니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116513998.png)
먼저 다음과 같이 코드를 작성했습니다.
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개밖에 없으므로 잘못된 값입니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514049.png)
따라서 F5 키로 코드를 실행하면 AutoFilter 메서드가 실패했습니다라는 오류 메시지가 나타납니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514022.png)
➤ 해결 방법은 간단합니다. 필드 번호를 범위의 실제 열 위치에 맞게 수정하면 됩니다. 여기서는 Sales(매출) 열이 세 번째 열이므로 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
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514050.png)
➤ 이후 F5 키를 눌러 코드를 실행합니다.
이제 오류 메시지 없이 지정한 조건대로 범위가 정상적으로 필터링됩니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514089.png)
방법 2. 올바른 범위(Range) 지정하기
이번에는 아래 데이터셋의 Sales(매출) 열을 기준으로 $2,500.00 초과 값만 필터링해 보겠습니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514098.png)
다음은 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으로 지정되어 있습니다. 하지만 D3:D100 범위는 단 하나의 열만 포함하므로 필드 번호 3과 서로 맞지 않습니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514191.png)
그래서 F5 키를 누르면 동일한 오류 메시지가 다시 나타납니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514174.png)
➤ 코드를 아래와 같이 수정합니다.
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으로 변경했습니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514106.png)
➤ F5 키를 눌러 실행하면,
이후에는 오류 없이 조건에 맞게 범위가 정상적으로 필터링됩니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514149.png)
방법 3. 표(Table)를 범위로 변환한 후 필터 적용하기
엑셀의 표(Table) 기능으로 만든 데이터에 AutoFilter 메서드를 적용하려 하면 오류가 발생할 수 있습니다. 아래 Table 시트의 표를 Sales(매출) 열 기준으로 필터링하는 코드를 살펴보겠습니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514241.png)
이를 위해 작성한 코드는 다음과 같습니다.
Sub fixing_autofilter_issue_3()
Dim sht As Worksheet
Set sht = Worksheets("Table")
sht.Range("B3:D3").AutoFilter field:=3, Criteria1:=">=2500"
End Sub
언뜻 보기에는 문제가 없어 보입니다. 하지만 실제로 실행해 보겠습니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514230.png)
F5 키를 누른 후 오류 메시지가 나타납니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514371.png)
이 문제를 해결하려면 먼저 표를 일반 셀 범위로 변환해야 합니다.
➤ 표를 선택한 뒤 테이블 디자인(Table Design) 탭 >> 도구(Tools) 그룹 >> 범위로 변환(Convert to Range) 옵션을 클릭합니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514341.png)
그러면 변환 여부를 확인하는 메시지 상자가 나타납니다.
➤ 여기서 예(Yes)를 누릅니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514461.png)
변환이 완료되면 표가 일반 범위로 바뀝니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514472.png)
➤ 이제 앞서 사용한 코드를 다시 실행해 봅니다.
Sub fixing_autofilter_issue_3()
Dim sht As Worksheet
Set sht = Worksheets("Table")
sht.Range("B3:D3").AutoFilter field:=3, Criteria1:=">=2500"
End Sub
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514414.png)
➤ F5 키를 누릅니다.
이번에는 AutoFilter 메서드가 정상적으로 작동하는 것을 확인할 수 있습니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514417.png)
방법 4. 피벗 테이블이 아닌 원본 데이터에 필터 적용하기
피벗 테이블(Pivot Table)에 AutoFilter 메서드를 직접 적용하면 오류가 발생합니다. 아래 Pivot Table에는 두 번째 열에 매출 값이 있으며, 이 값을 기준으로 필터링을 시도해 보겠습니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514477.png)
다음과 같이 코드를 작성했습니다.
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의 두 번째 열을 가리킵니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514444.png)
하지만 F5 키를 누르면 AutoFilter 메서드가 실패했습니다라는 오류 메시지가 나타납니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514553.png)
이 문제를 해결하려면 피벗 테이블이 아니라 피벗 테이블의 원본 데이터 범위(Source Range)에 AutoFilter 메서드를 적용해야 합니다.
아래 그림처럼 이 피벗 테이블의 원본 데이터는 Source 시트에 있으며, 코드도 이 시트를 대상으로 실행합니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514500.png)
➤ 원본 데이터 범위에 대해 다음 코드를 적용합니다.
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
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514548.png)
➤ F5 키를 누릅니다.
이제 Sales(매출) 열을 기준으로 지정한 조건에 맞게 범위가 정상적으로 필터링됩니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514585.png)
방법 5. 전체 범위 대신 헤더 행만 지정하기
마지막으로 살펴볼 항목은 비교적 드물게 오류를 유발하지만, 원인이 될 수 있다는 점을 알아두면 좋은 사례입니다.
앞선 예제들과 마찬가지로 아래 범위에 AutoFilter 메서드를 적용해 보겠습니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514579.png)
필터 적용을 위해 작성한 코드는 다음과 같습니다.
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 범위를 사용했는데, 이는 불필요한 지정입니다. 특히 데이터 양이 많은 경우 이런 방식이 오류 메시지의 원인이 되기도 합니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514632.png)
따라서 코드를 아래와 같이 헤더 행만 범위로 지정하도록 수정할 수 있습니다.
Sub fixing_autofilter_issue_5()
Dim sht As Worksheet
Set sht = Worksheets("Header")
sht.Range("B3:D3").AutoFilter field:=3, Criteria1:=">=2500"
End Sub
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514697.png)
F5 키를 누르면 어떠한 문제도 없이 원하는 결과를 얻을 수 있습니다.
![[해결법] 엑셀 범위 클래스의 AutoFilter 메서드 실패 오류, 원인별 해결 방법 5가지](https://kr.wsxdn.com/UploadFiles_1288/202210/2022103116514667.png)
마무리
이 글에서는 엑셀에서 발생하는 'AutoFilter 메서드가 실패했습니다' 오류를 해결할 수 있는 다양한 방법을 살펴보았습니다. 필드 번호 확인, 범위 재설정, 표 및 피벗 테이블 처리, 헤더 행 지정까지 상황별로 적절한 해결책을 적용하면 대부분의 오류를 손쉽게 해결할 수 있습니다. 도움이 되었기를 바라며, 추가 제안이나 궁금한 점이 있다면 댓글로 자유롭게 남겨주세요.
함께 보면 좋은 글
- Excel VBA로 AutoFilter 상태 확인 후 보이는 행만 복사하는 방법
- VBA AutoFilter: 오름차순 정렬 구현 방법 3가지
- Excel VBA로 특정 값이 아닌 데이터만 AutoFilter 하는 방법
- Excel VBA: AutoFilter가 존재할 경우 제거하는 방법 (7가지 예제)