반응형

엑셀 VBA 자동화 (28편): 버튼 하나로 원하는 데이터만 쏙! 인사/재무 보고서 자동 추출 매크로

방대한 임직원 인사 대장이나 기업 지출 대장에서 매번 특정 조건(예: '재무팀'이면서 '과장'인 사원)의 데이터만 수동으로 필터링하여 복사하느라 시간을 허비하고 계시진 않나요? 오늘은 마우스 클릭과 타이핑 몇 줄로 복잡한 조건 검색을 완벽하게 자동화하고, 결과물을 별도의 보고서 시트에 깨끗하게 깔아주는 자동 추출 프로그램의 정석을 배워보겠습니다.
EXCEL VBA AUTOMATION

행정 조직이나 재무 부서에서 일일이 필터를 걸고 지우는 수작업은 업무 속도를 떨어뜨리는 주범입니다. 특히 경영진의 갑작스러운 요구로 특정 조건의 대상자 명단을 추려내야 할 때, 조건이 까다로울수록 필터 조작 과정에서 휴먼 에러가 발생할 가능성이 매우 큽니다. 많은 실무자들이 마우스로 수동 필터를 걸어 데이터를 복사하지만, VBA의 AdvancedFilter(고급 필터) 매커니즘을 프로그램화하면 수만 행의 데이터 속에서도 단 0.1초 만에 우리가 지정한 조건 테이블의 데이터만 완벽하게 바인딩하여 추출해 낼 수 있습니다.

이 자동화 시스템을 구축하려면 워크북 내에 두 개의 시트가 준비되어야 합니다. 하나는 원본 로우 데이터가 담긴 "인사대장" 시트이고, 다른 하나는 사용자가 조건을 입력하고 결과를 받아볼 "검색보고서" 시트입니다. 엑셀 수식과 달리 매크로는 원본 시트를 오염시키지 않고 원하는 결과만 정밀 타격하여 가져오므로 매우 안전하고 격식 있는 데이터 인프라가 완성됩니다.

1. 매크로 프로그램 이식을 위한 개발 환경 진입 및 클릭 단계
자동화 스크립트를 삽입하기 위해 엑셀 창이 열린 상태에서 키보드의 Alt + F11을 동시에 눌러 VBA 개발자 편집기를 호출합니다. 좌측의 프로젝트 탐색기 창의 빈 공간에서 마우스 우클릭을 한 후, [삽입(I)] - [모듈(M)]을 마우스 왼쪽 버튼으로 차례대로 클릭하여 코드를 기입할 백지 상태의 편집 레이어 창을 생성합니다. 새로 활성화된 모듈 창에 아래의 조건별 일괄 추출 자동화 코드를 누락 없이 복사하여 붙여넣어 줍니다.

Sub AutoExtractReport()
    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초 만에 깔끔하게 추출 완료
수만 줄의 데이터베이스에서 필요한 정보만 필터링하고 복사하여 보고서를 수작업으로 편집하던 비효율은 데이터 담당자의 칼퇴를 가로막는 가장 큰 걸림돌입니다. 오늘 구현한 AdvancedFilter 자동 추출 매크로 시스템을 사내 정산 대장이나 임직원 명부에 이식해 보십시오. 단 한 번의 버튼 클릭으로 복잡한 조건의 검증 서류를 컴퓨터가 완벽하게 컴파일하여 결과 창에 대령하는 최고의 업무 혁신을 경험하시게 될 것입니다.
반응형

+ Recent posts