전략은 상상력으로 시작해서 검증으로 기획된다

Built by 상상력기획자

개인관심사/업무스킬

엑셀 VBA로 구현하는 반복 보고서 자동 분할

상상력기획자 2025. 4. 10. 14:22

핵심요약

  • 반복되는 보고서를 하나하나 수작업으로 나누는 비효율을 없애기 위해 엑셀 VBA 자동화를 도입한다.
  • 보고서가 반복 구조로 배치된 시트를 탐색해 개별 보고서 단위로 자동 분리 및 저장한다.
  • 단일 시트에서 여러 건의 보고서를 구간 단위로 분할해 각각의 파일로 저장할 수 있다.
  • 코드 구성은 폴더 탐색, 시트 반복, 영역 복사, 저장 로직으로 간결하게 구성된다.
  • 실무에서 거래명세서, 재고현황표, 교육이수보고서 등 다양한 형태의 반복 보고서 자동화에 활용할 수 있다.


반복 보고서 자동화 필요성

엑셀 기반 보고서를 다루다 보면 자주 마주하는 형식이 있다. 하나의 시트에 반복적으로 나열된 구조의 보고서다. 예를 들어 거래명세서가 수평으로 세 개 연속 배치되어 있다면, 우리는 그걸 하나하나 복사하고, 새 파일에 붙여넣고, 저장하고, 다시 처음으로 돌아가야 한다. 보고서가 10건, 30건, 100건으로 늘어나면 이 단순 반복 작업은 생산성을 저해하고 실수를 유발하는 대표적인 요인이 된다.

자동화의 핵심은 이 반복성을 인식하는 것이다. 사람이 눈으로 구분하고 손으로 복사하는 것을, 컴퓨터는 규칙으로 이해하고 일괄 실행한다. VBA는 엑셀의 내장 언어로, 이런 반복 작업을 자동화하기 위한 최적의 도구다. 단 한 번의 클릭으로 수십개의 보고서가 각각 파일로 저장된다면, 그 시간과 에너지는 더 가치있는 업무에 집중할 수 있게 해줄 것이다.

항목 수작업 방식 자동화 방식
시간 1건당 수 분 이상 소요 클릭 한 번
정확도 복붙 중 오타/누락 가능 규칙 기반으로 오류 없음
효율성 단순 반복 작업 피로 누적 루틴 자동 실행
생산성 보고서 작성보다 분할/저장에 시간 소모 본연 업무에 집중 가능

어떤 구조에 적합한가

재고 리포트, 검사성적서, 교육이수표, 프로젝트 진척도 보고서 등, 반복 구간이 일정하고 보고서 단위가 명확히 구분되는 모든 엑셀 문서에 적용할 수 있다. 주요 조건은 다음과 같다. 첫째, 한 보고서가 차지하는 영역이 열 또는 행 단위로 일정해야 한다. 둘째, 같은 시트 내에 동일한 형식으로 여러 보고서가 나란히 배치되어 있어야 한다. 셋째, 파일을 개별 저장해야 하는 요구가 있을 때 이 자동화는 그 진가를 발휘한다.


자동화 설계 핵심 로직

자동 분할 매크로의 작동 흐름은 크게 다섯 단계로 나뉜다. 첫째, 보고서 원본이 저장된 폴더를 탐색한다. 둘째, 각 엑셀 파일을 순차적으로 연다. 셋째, 각 시트를 탐색해 보고서가 차지하는 구간을 계산한다. 넷째, 각 보고서를 개별 워크북으로 복사한다. 다섯째, 지정된 결과 폴더에 저장한다. 이 과정을 루프로 반복하면 수작업의 반거로움 없이, 보고서 한 건당 하나의 엑셀 파일이 생성된다.

  • 폴더 구조 준비
    • 원본 폴더에 모든 통합 보고서 파일 저장
    • 결과 폴더 생성 (분할된 파일이 저장될 공간)
  • 엑셀 파일 구조 파악
    • 보고서 하나당 몇 열/행 차지하는지 확인
    • 한 시트에 몇 번 반복되는지 확인
    • 예 : 가로 기준 보고서가 20열씩 3세트 반복
  • 매크로 설계 핵심 포인트
    • 모든 파일 열기 (폴더 내 반복)
    • 각 시트 반복 (시트 내 보고서 탐색)
    • 각 보고서의 좌우 데이터 잘라내기
    • 각 보고서마다 새 파일 저장 (이름 자동 생성)
  • 매크로 실행 결과
    • 원래는 한 파일이었던 보고서가
    • 자동으로 3건, 5건, 10건 등 개별 파일로 나눠져 저장됨

VBA 코드 설명 및 사용 방법

엑셀 개발 도구에서 VBA 편집기를 열고, 새로운 모듈을 생성한 뒤 다음과 같은 코드를 삽입한다. 코드 내에서 보고서 하나가 차지하는 열 수, 반복 횟수, 원본 및 결과 폴더 경로를 자신의 환경에 맞게 조정하면 된다.

Sub AutoSplitReports()
    ' 타겟 폴더, 결과 폴더 경로
    Dim targetFolder As String, resultFolder As String
    Dim fileName As String, saveFileName As String

    ' 보고서 구간 정보
    Dim unitCol As Integer: unitCol = 20
    Dim repeatCount As Integer: repeatCount = 3

    ' 반복용 변수
    Dim wbSource As Workbook, wbNew As Workbook
    Dim ws As Worksheet, newWS As Worksheet
    Dim i As Integer, j As Integer
    
    targetFolder = "C:\Reports\Original"
    resultFolder = "C:\Reports\Split"
    fileName = Dir(targetFolder & "\*.xls*")
    
    Do While fileName <> ""
        Set wbSource = Workbooks.Open(targetFolder & "\" & fileName)
        
        For Each ws In wbSource.Worksheets
            For i = 0 To repeatCount - 1
                Set wbNew = Workbooks.Add
                Set newWS = wbNew.Sheets(1)
                
                ' 보고서 영역 복사
                ws.Range(ws.Cells(1, 1 + i * unitCol), ws.Cells(100, (i + 1) * unitCol)).Copy _
                    Destination:=newWS.Cells(1, 1)
                
                ' 파일 저장
                saveFileName = resultFolder & "\" & Left(fileName, Len(fileName) - 5) & "_report" & (i + 1) & ".xlsx"
                wbNew.SaveAs Filename:=saveFileName
                wbNew.Close SaveChanges:=False
            Next i
        Next ws
        
        wbSource.Close SaveChanges:=False
        fileName = Dir
    Loop
End Sub

 

코드는 간결하지만 강력하다. 반복 구조가 명확한 보고서를 자동으로 잘라내고, 새로운 파일에 붙여넣고, 파일명까지 순서대로 지정하여 저장하는 흐름이다. 실무에서는 이 코드를 버튼 하나에 연결하거나, 사용자 입력값을 받을 수 있는 폼과 연결하면 더욱 유연하게 활용할 수 있다.

  • 하드코딩 대신 유저폼 구성 : 유닛수, 반복횟수, 폴더경로 등을 직접 입력받으면 응용 가능성 ↑
  • 분할 대상 자동 탐지 : 특정 셀 위치 값이 “보고서 시작”인 경우 자동 인식하는 방식도 구현 가능
  • 파일 이름 규칙 통일 : 보고서 유형 + 날짜 + 순번 등으로 규칙 설정 시 문서 관리 효율화

적용 예시

예를 들어, 월별 재고현황표가 하나의 시트에 세 건씩 가로로 반복되어 있다고 가정해보자. 보고서당 20열을 차지하며, 시트는 총 5개로 구성되어 있다면 총 15건의 보고서를 나눠야 한다. 수작업으로는 최소 30분 이상 소요되지만, 이 자동화 매크로를 실행하면 단 30초 이내에 각각 재고보고서_1.xlsx부터 재고보고서_15.xlsx까지 자동 저장된다. 정기적으로 반복되는 보고서 작업이라면 그 효과는 누적되어 막대한 시간 절약으로 이어진다.


자동화 구현을 위한 체크포인트

실제 적용 전에는 몇 가지 준비사항이 필요하다. 첫째, 원본 폴더와 결과 저장 폴더를 명확히 구분한다. 둘째, 보고서 하나가 차지하는 열 수 또는 행 수를 정확히 파악한다. 셋째, 매크로를 실행할 엑셀 파일은 반드시 .xlsm 형식으로 저장해야 하며, 엑셀 옵션에서 개발 도구가 활성화되어 있어야 한다. 넷째, 파일 저장 시 기존 파일 덮어쓰기를 방지하거나, 고유 이름 규칙을 설정하는 것이 바람직하다.

  • 폴더 구조 구성 (원본 / 결과)
  • 보고서 구조 파악 (열 단위 / 반복 횟수)
  • 엑셀에서 개발 도구 활성화
  • 매크로 파일 저장 형식 .xlsm
  • 코드 작성 및 실행 테스트
  • 오류 예외 처리 설정 (파일 열기 실패 등)
  • 사용 편의를 위한 버튼/폼 구성

실무에서 확장 가능한 기능

기본 구조를 익히면 다양한 응용이 가능하다. 사용자 입력창을 만들어 폴더 경로나 열 수를 입력받을 수 있고, 특정 셀 값이나 텍스트가 포함된 영역만 자동 인식하게 하는 기능도 추가할 수 있다. 또, PDF 저장, 이메일 자동 전송 등 추가적인 자동화 시나리오로 발전시킬 수도 있다. 핵심은 보고서 구조의 규칙성과 반복성을 시스템적으로 해석해내는 것이다.


반복 업무를 줄이고, 보고의 질을 높여라

수작업으로 보고서를 분할하는 시대는 끝났다. 이제는 컴퓨터에게 시키는 방식으로 바꿔야 할 때다. 반복 보고서 구조는 의외로 단순하다. 이 단순함을 자동화의 관점에서 보면, 우리는 매일의 낭비를 줄이고 더 전략적인 시간 분배가 가능해진다. 매크로 한 줄이 야근을 줄이고, 리포트의 정확도를 높인다.

  • 수작업 보고서 분할은 시간과 리소스를 낭비한다
  • 엑셀 VBA로 기본적인 루틴을 자동화하면 누구나 실무 자동화 구현 가능
  • 코드 템플릿을 조금만 수정하면 모든 반복 보고서 구조에 활용 가능

728x90