엑셀 VBA 자동화 (28편): 버튼 하나로 원하는 데이터만 쏙! 인사/재무 보고서 자동 추출 매크로
행정 조직이나 재무 부서에서 일일이 필터를 걸고 지우는 수작업은 업무 속도를 떨어뜨리는 주범입니다. 특히 경영진의 갑작스러운 요구로 특정 조건의 대상자 명단을 추려내야 할 때, 조건이 까다로울수록 필터 조작 과정에서 휴먼 에러가 발생할 가능성이 매우 큽니다. 많은 실무자들이 마우스로 수동 필터를 걸어 데이터를 복사하지만, VBA의 AdvancedFilter(고급 필터) 매커니즘을 프로그램화하면 수만 행의 데이터 속에서도 단 0.1초 만에 우리가 지정한 조건 테이블의 데이터만 완벽하게 바인딩하여 추출해 낼 수 있습니다.
이 자동화 시스템을 구축하려면 워크북 내에 두 개의 시트가 준비되어야 합니다. 하나는 원본 로우 데이터가 담긴 "인사대장" 시트이고, 다른 하나는 사용자가 조건을 입력하고 결과를 받아볼 "검색보고서" 시트입니다. 엑셀 수식과 달리 매크로는 원본 시트를 오염시키지 않고 원하는 결과만 정밀 타격하여 가져오므로 매우 안전하고 격식 있는 데이터 인프라가 완성됩니다.
1. 매크로 프로그램 이식을 위한 개발 환경 진입 및 클릭 단계
자동화 스크립트를 삽입하기 위해 엑셀 창이 열린 상태에서 키보드의 Alt + F11을 동시에 눌러 VBA 개발자 편집기를 호출합니다. 좌측의 프로젝트 탐색기 창의 빈 공간에서 마우스 우클릭을 한 후, [삽입(I)] - [모듈(M)]을 마우스 왼쪽 버튼으로 차례대로 클릭하여 코드를 기입할 백지 상태의 편집 레이어 창을 생성합니다. 새로 활성화된 모듈 창에 아래의 조건별 일괄 추출 자동화 코드를 누락 없이 복사하여 붙여넣어 줍니다.
Dim wsData As Worksheet, wsReport As Worksheet
Dim dataRange As Range, criteriaRange As Range, copyRange As Range
' 1. 제어 대상 워크시트 변수 바인딩
Set wsData = ThisWorkbook.Sheets("인사대장")
Set wsReport = ThisWorkbook.Sheets("검색보고서")
' 2. 고급 필터 구동을 위한 물리적 영역 정의
Set dataRange = wsData.Range("A1").CurrentRegion ' 원본 데이터 전체
Set criteriaRange = wsReport.Range("A1:B2") ' 사용자가 입력한 조건 구역
Set copyRange = wsReport.Range("A5") ' 결과물이 출력될 기준 좌표
' 3. 기존 보고서 출력 영역 초기화 처리 (A5 이후의 이전 데이터 소거)
wsReport.Range("A5").CurrentRegion.Offset(1, 0).Clear
' 4. 고급 필터 핵심 명령어 가동
dataRange.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=criteriaRange, _
CopyToRange:=copyRange, _
Unique:=False
MsgBox "조건에 맞는 데이터 추출이 완료되었습니다!", vbInformation, "인사행정 시스템"
End Sub
2. 추출 프로그램 소스코드 매커니즘 및 인수 상세 해설
이 자동화의 중추는 17행의 AdvancedFilter 메서드입니다. 첫 번째 인수인 Action:=xlFilterCopy는 원본 데이터를 그 자리에서 필터링하는 것이 아니라, 다른 장소로 '복사본을 추출'하겠다는 모드 정의입니다. CriteriaRange 변수에는 사용자가 검색보고서 시트 상단 A1부터 B2 영역에 구성해 놓은 '부서'와 '직급' 등의 조건 데이터 매트릭스를 대입합니다. 마지막으로 CopyToRange에 출력 기준점인 A5 셀을 매칭하면, 매크로는 인사대장 시트의 거대한 데이터 영역(CurrentRegion)을 고속 순회하며 조건에 정확히 일치하는 레코드 행들만 수직 정렬하여 검색보고서 하단에 실시간 누적 적재하는 정교한 시퀀스입니다.
- 제목 행(Header)의 일치성: 고급 필터 매커니즘이 정상 가동되려면, "검색보고서" 시트의 조건 영역(A1, B1)에 기입된 제목 단어가 "인사대장" 시트의 타이틀(A1, B1 등)과 토씨 하나 틀리지 않고 완벽하게 일치해야 합니다. 오타가 있으면 엑셀 시스템이 매칭 대상을 찾지 못해 공백을 반환합니다.
- CurrentRegion 초기화 보안 코드: 새로운 조건으로 검색 버튼을 누를 때 이전 결과물이 화면에 남아있으면 데이터가 겹치는 오류가 생깁니다. 이를 완전 차단하기 위해 14행에
Clear명령어를 선언하여 기존 테이블 결과물 영역을 싹 청소한 뒤 새 데이터를 안착시키는 예외 처리가 가동됩니다. - 앤드(AND)와 오어(OR) 조건 규칙: 조건 구역(A1:B2)에서 동일한 행(2행)에 조건을 나열하면 'AND(부서가 재무팀이면서 동시에 과장인 사람)' 조건으로 작동하며, 행을 달리하여 아래로 적으면 'OR(재무팀이거나 혹은 과장인 사람)' 조건으로 전환되는 엑셀 자체의 고급 연산 규칙을 이해하고 적용해야 합니다.
검색 보고서 시트의 조건부 데이터 바인딩 구조 예시
| 조건 입력부 (A1:B2 영역) | 매크로 가동 후 추출 좌표 (A5 기준점) | VBA 프로그램 제어 결과물 |
|---|---|---|
| A1: 부서명 / B1: 직급 A2: 재무팀 / B2: 과장 |
인사대장에서 해당 조건 행 탐색 후 검색보고서 A5 셀 이하로 강제 Copy |
재무팀 소속 과장 직급의 직원들만 완벽하게 정렬된 단독 테이블로 자동 노출 |
| A1: 부서명 / B1: 직급 A2: 인사팀 / B2: (공백) |
직급 상관없이 인사팀 전체 필터링 Action:=xlFilterCopy 시퀀스 가동 |
인사팀 전 임직원 명부 데이터만 1초 만에 깔끔하게 추출 완료 |
'코딩으로 시간 벌기 > 엑셀 VBA' 카테고리의 다른 글
| 엑셀 VBA 자동화 (30편): 단순 복붙 야근은 끝, 데이터 제어의 중심인 반복문(For, Do While) 마스터하기 (0) | 2026.06.12 |
|---|---|
| 엑셀 VBA 자동화 (29편): 인사/재무 대장의 무결성을 지키는 비밀번호 기반 마스터 데이터 잠금 시스템 (0) | 2026.06.12 |
| 엑셀 VBA 자동화 (27편): 실수를 허용하지 않는 대장 관리, 입력 즉시 실시간 검증하는 워크시트 매크로 (0) | 2026.06.02 |
| 엑셀 VBA 자동화 (26편): 파편화된 외부 파일들, 버튼 하나로 개별 시트에 똑똑하게 일괄 취합하기 (0) | 2026.05.29 |
| 엑셀 VBA 자동화 (25편): 지정 폴더 내 수많은 엑셀 파일들, 버튼 하나로 마스터 시트에 자동 취합하기 (0) | 2026.05.26 |
