엑셀 매크로 기록기: 영업 필터를 녹화하고 범위 오류 확인하기
필터를 녹화한 뒤 자료를 추가했을 때, 화면에 보이는 행이 모두 필터 조건을 만족한다고 생각하기 쉽습니다. 하지만 필터 범위 밖의 새 행은 그대로 보일 수 있습니다. 이번 실습은 부서별 명단을 확인하는 작업으로, 건수·합계와 함께 ID 목록을 대조해 범위 오류를 드러냅니다.
녹화할 입력과 세 가지 예상 화면
practice-58.xlsx의 Data!A1:C6에는 아래 가상 자료가 있습니다. Check!B20은 조건 영업입니다. 시작 파일은 필터 전 상태이므로 Check!C2=5, C3=16200이 나오는 것이 정상입니다. 이미 필터를 실행한 파일로 배포하지 않았습니다.
| ID | 부서 | 금액 |
|---|---|---|
| E001 | 영업 | 3000 |
| E002 | 개발 | 4000 |
| E003 | 영업 | 3500 |
| E004 | 영업 | 3200 |
| E005 | 인사 | 2500 |
처음 영업만 남기면 ID는 E001,E003,E004, 3건, 합계 9700입니다. 이어서 A7:C8에 E006/영업/4000, E007/개발/3800을 추가합니다. A1:C6만 필터링하면 밖에 있는 두 행도 보여 5건·17500이 됩니다. 범위를 A1:C8로 넓히면 E007은 제외되어 4건·13700이며 ID는 E001,E003,E004,E006입니다.
직접 녹화하고 저장된 범위를 읽기
매크로 기록기는 사용자의 작업 단계를 VBA 코드로 기록합니다. 이 실습에서는 셀을 선택하는 순서까지 살펴봅니다. 실습 XLSX를 별도 XLSM 사본으로 저장하고 개발 도구를 표시합니다. 조직의 매크로 차단 정책을 우회하지 말고 허용된 연습 환경을 사용하세요.
-
Data!A1:C6을 선택합니다. 기록 시작에서 이름을
RecordedSalesFilter로 정하고 저장 위치를 이 통합 문서로 지정합니다. 필터에서 부서 영업만 선택하고 기록을 중지합니다. 코드를 열어 필터 범위가 어디에 저장됐는지 확인합니다. -
필터를 해제하고 녹화 매크로를 실행합니다. Check!B2=3, B3=9700, B4=
E001,E003,E004를 기대값으로 두고 C2:C3을 비교합니다. 보이는 ID를 직접 읽어 C4에 입력합니다. 합계만 같고 대상이 다를 수 있으므로 ID 확인을 생략하지 않습니다. -
두 행을 추가하고 같은 고정 범위를 재실행합니다. 예상 5건·17500과 실제 보이는 ID를 확인한 뒤 범위를 A1:C8로 바꿉니다. 확장 실험의 기대값을 B2=4, B3=13700, B4=
E001,E003,E004,E006으로 바꾼 후 다시 비교합니다.
AutoFilter의 Field는 목록의 왼쪽 열을 1로 세는 상대 위치입니다. A:C 중 부서는 두 번째 열이므로 아래 참조 코드는 Field:=2를 씁니다. 시작 열을 바꾼 다른 표에 그대로 숫자 2를 적용하면 다른 열이 대상이 될 수 있습니다.
범위만 다른 두 참조 매크로
녹화 결과와 비교할 완전한 RecorderFilterReference.bas도 제공합니다. BAS는 VBA 편집기의 파일 가져오기로 사본에 넣습니다. 이 코드는 녹화본을 덮어쓰지 않는 별도 이름이며, 고정 범위와 확장 범위를 각각 실행할 수 있습니다. 대상 Data를 명시적으로 활성화한 후 Selection.AutoFilter를 사용합니다. 이것이 모든 Excel 환경에서 실제 실행됐다는 뜻은 아닙니다.
Attribute VB_Name = "RecorderFilterReference"
Option Explicit
Public Sub RecordedFilterReference()
ApplySalesFilter 6
End Sub
Public Sub ExpandedFilterReference()
ApplySalesFilter 8
End Sub
Public Sub ClearSalesFilter()
Dim ws As Worksheet
Dim checks As Worksheet
On Error GoTo Fail
Set ws = ThisWorkbook.Worksheets("Data")
Set checks = ThisWorkbook.Worksheets("Check")
checks.Range("C4").ClearContents
If ws.ProtectContents Then Err.Raise vbObjectError + 581, , "Use an unprotected practice copy."
If ws.AutoFilterMode Then ws.AutoFilterMode = False
checks.Calculate
Exit Sub
Fail:
MsgBox "Clear filter failed: " & Err.Description, vbExclamation
End Sub
Private Sub ApplySalesFilter(ByVal lastRow As Long)
Dim ws As Worksheet
Dim checks As Worksheet
Dim criterion As Variant
On Error GoTo Fail
Set ws = ThisWorkbook.Worksheets("Data")
Set checks = ThisWorkbook.Worksheets("Check")
checks.Range("C4").ClearContents
criterion = checks.Range("B20").Value2
If VarType(criterion) <> vbString Then
Err.Raise vbObjectError + 582, , "Check!B20 must contain the department text."
End If
If Len(criterion) = 0 Then
Err.Raise vbObjectError + 583, , "Check!B20 is empty."
End If
If ws.ProtectContents Then Err.Raise vbObjectError + 584, , "Use an unprotected practice copy."
If ws.AutoFilterMode Then ws.AutoFilterMode = False
ThisWorkbook.Activate
ws.Activate
ws.Range("A1:C" & lastRow).Select
' Selection.AutoFilter is the documented Mac-compatible route.
Selection.AutoFilter Field:=2, Criteria1:=CStr(criterion)
checks.Calculate
Exit Sub
Fail:
MsgBox "Filter failed: " & Err.Description, vbExclamation
End Sub
보이는 합계와 대상 목록을 따로 검사하기
Check!C2는 =SUBTOTAL(103,'Data'!A2:A8), C3은 =SUBTOTAL(109,'Data'!C2:C8)입니다. SUBTOTAL은 필터 결과에서 제외된 행을 계산에서 제외합니다. 이 실험에서는 수동 숨김이나 정렬을 추가하지 않습니다. 숨김 행까지 섞으면 '필터 범위 밖 행'이라는 한 가지 원인을 비교하기 어려워집니다. C4는 자동 ID 추출 결과가 아니라 독자가 직접 읽어 적는 관찰 칸입니다. 참조 매크로는 재실행마다 C4를 지워 이전 관찰을 재사용하지 않게 합니다.
필터 결과가 다르면 먼저 범위 끝 주소, Check!B20의 정확한 문자열, 셀의 부서 값을 확인합니다. B20의 공백은 자동 정리하지 않으며 매크로는 부서·금액 자료 전체를 정제하지도 않습니다. ClearSalesFilter로 해제한 후 새 사본의 입력과 비교하고 올바른 범위로 다시 적용하세요. 매크로 오류 메시지가 나오면 오래된 Check 수식을 보고 실행 성공으로 해석하지 않습니다.
이 파일로 증명할 수 있는 것
Python 테스트는 주어진 행에서 세 가지 ID 목록과 9700/17500/13700 합계를 독립 계산합니다. 두 참조 프로시저가 6행과 8행 범위를 넘기는지도 소스로 확인했습니다. Excel의 기록기, 필터 UI, VBA 실행은 수행하지 않았습니다. 따라서 화면 조작이나 재개봉 후 매크로 실행은 독자의 연습 사본에서 확인할 항목입니다. 이 예제는 자료를 외부에 전송하거나 새 보고서 파일로 내보내지 않습니다.
입력과 결과 칸을 찾는 기존 그림
그림은 실습 위치를 찾는 보조 자료입니다. 실제 실행 결과는 위 절차로 만든 사본의 값과 상태를 대조합니다.



공식 자료
Automate tasks with the Macro Recorder | Microsoft Support
Range.AutoFilter method (Excel)
SUBTOTAL function | Microsoft Support
출처 원문 수집일: S1 2026-09-24; S2 2026-09-24; S3 2026-09-24.
이어서 연습할 글
고정 범위와 마지막 행을 찾는 코드의 차이는 매크로와 VBA 비교 예제에서 확인하고, 준비한 코드를 실행 단추에 연결할 때는 매크로 버튼 만들기를 이어서 연습하세요.