엑셀 매크로 기록기: 영업 필터를 녹화하고 범위 오류 확인하기

필터를 녹화한 뒤 자료를 추가했을 때, 화면에 보이는 행이 모두 필터 조건을 만족한다고 생각하기 쉽습니다. 하지만 필터 범위 밖의 새 행은 그대로 보일 수 있습니다. 이번 실습은 부서별 명단을 확인하는 작업으로, 건수·합계와 함께 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 사본으로 저장하고 개발 도구를 표시합니다. 조직의 매크로 차단 정책을 우회하지 말고 허용된 연습 환경을 사용하세요.

  1. Data!A1:C6을 선택합니다. 기록 시작에서 이름을 RecordedSalesFilter로 정하고 저장 위치를 이 통합 문서로 지정합니다. 필터에서 부서 영업만 선택하고 기록을 중지합니다. 코드를 열어 필터 범위가 어디에 저장됐는지 확인합니다.

  2. 필터를 해제하고 녹화 매크로를 실행합니다. Check!B2=3, B3=9700, B4=E001,E003,E004를 기대값으로 두고 C2:C3을 비교합니다. 보이는 ID를 직접 읽어 C4에 입력합니다. 합계만 같고 대상이 다를 수 있으므로 ID 확인을 생략하지 않습니다.

  3. 두 행을 추가하고 같은 고정 범위를 재실행합니다. 예상 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 실행은 수행하지 않았습니다. 따라서 화면 조작이나 재개봉 후 매크로 실행은 독자의 연습 사본에서 확인할 항목입니다. 이 예제는 자료를 외부에 전송하거나 새 보고서 파일로 내보내지 않습니다.

입력과 결과 칸을 찾는 기존 그림

그림은 실습 위치를 찾는 보조 자료입니다. 실제 실행 결과는 위 절차로 만든 사본의 값과 상태를 대조합니다.

가상 부서 자료 5건 16200에서 영업 E001·E003·E004의 기대값 3건 9700을 구분한 설명 도해
가상 부서 자료 5건 16200에서 영업 E001·E003·E004의 기대값 3건 9700을 구분한 설명 도해. 실제 앱 실행 화면이 아니며 실제 Excel 필터·VBA 실행 또는 색상 관찰을 확인한 증거가 아닙니다.
고정 필터 범위 밖 두 행이 보이는 5건 17500과 A1:C8 확장 후 영업 4건 13700을 비교한 설명 도해
고정 필터 범위 밖 두 행이 보이는 5건 17500과 A1:C8 확장 후 영업 4건 13700을 비교한 설명 도해. 실제 앱 실행 화면이 아니며 실제 Excel 필터·VBA 실행 또는 색상 관찰을 확인한 증거가 아닙니다.
필터 범위 끝 주소, 부서 열 Field 2, Check C4의 직접 관찰 기록을 따로 확인하는 복구 설명 도해
필터 범위 끝 주소, 부서 열 Field 2, Check C4의 직접 관찰 기록을 따로 확인하는 복구 설명 도해. 실제 앱 실행 화면이 아니며 실제 Excel 필터·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 비교 예제에서 확인하고, 준비한 코드를 실행 단추에 연결할 때는 매크로 버튼 만들기를 이어서 연습하세요.

작성자 소개