본문으로 건너뛰기

실무 팁 ·

엑셀 반복 업무, 파이썬으로 10분 만에 끝내기

매달 반복되는 그 작업, 얼마나 걸리시나요

관공서나 중소기업 사무실에서 흔히 벌어지는 풍경이 있습니다. 지사별, 부서별, 담당자별로 각각 작성된 엑셀 파일 수십 개를 한 폴더에 모아놓고, 하나씩 열어서 복사-붙여넣기로 취합하는 작업입니다. 파일이 20개면 20번, 30개면 30번 같은 동작을 반복합니다. 중간에 서식이 다르거나 열 순서가 바뀌어 있으면 오류를 잡느라 시간이 더 걸리고, 담당자가 바뀌면 이 노하우는 그대로 사라집니다.

실제로 저희가 만난 한 지자체 산하 기관 담당자는 매월 말 25개 부서에서 올라오는 실적 보고 엑셀을 취합해 하나의 요약 파일로 만드는 데 하루 이상을 쓰고 있었습니다. 파일명 규칙도 제각각이고, 시트 이름도 통일되어 있지 않아 매번 파일을 열어 확인하는 과정이 필요했습니다. 이런 작업은 사람이 반복해서 처리하기에는 지루하고, 실수가 나기 쉬우며, 무엇보다 그 시간에 더 중요한 판단 업무를 할 수 없다는 것이 진짜 문제입니다.

이런 유형의 업무는 규칙이 명확합니다. “특정 폴더 안의 엑셀 파일을 모두 열어서, 정해진 열을 추출하고, 하나의 표로 합친다”는 규칙만 정의할 수 있으면 사람 대신 컴퓨터가 처리할 수 있는 일입니다. 그리고 이 작업을 자동화하는 데 가장 접근성이 좋은 도구가 파이썬입니다.

엑셀 취합 자동화 핵심 요약

왜 파이썬인가

엑셀 자체의 매크로(VBA)로도 비슷한 일을 할 수 있지만, VBA는 엑셀 안에서만 동작하고 문법이 낡아 유지보수가 까다롭습니다. 반면 파이썬은 무료이고, 학습 자료가 풍부하며, 무엇보다 pandas라는 라이브러리 하나로 “표 형태 데이터를 다루는 일”의 대부분을 몇 줄로 처리할 수 있습니다. 여기에 openpyxl을 함께 쓰면 셀 서식 지정, 여러 시트 생성, 조건부 서식 같은 세밀한 제어도 가능합니다.

정리하면 역할이 이렇게 나뉩니다.

  • pandas: 데이터를 읽고, 합치고, 필터링하고, 집계하는 데 특화
  • openpyxl: 엑셀 파일의 서식, 시트 구조, 셀 단위 편집에 특화

취합·정리처럼 “여러 표를 하나로 합치는” 작업은 pandas만으로도 충분히 해결되는 경우가 많습니다.

실제 코드로 보는 폴더 내 엑셀 파일 취합

아래는 한 폴더 안에 있는 모든 xlsx 파일을 읽어서 하나의 데이터프레임으로 합치고, 결과를 새 엑셀 파일로 저장하는 코드입니다. 각 파일의 첫 번째 시트에 “부서”, “실적건수”, “비고” 열이 있다고 가정합니다.

import glob
import pandas as pd

# 1. 대상 폴더 안의 xlsx 파일 목록을 모두 가져온다
folder_path = "./부서별_실적"
file_list = glob.glob(f"{folder_path}/*.xlsx")

# 2. 각 파일을 읽어서 리스트에 쌓는다
all_data = []
for file_path in file_list:
    df = pd.read_excel(file_path, sheet_name=0)
    df["원본파일"] = file_path.split("/")[-1]  # 어느 파일에서 왔는지 추적
    all_data.append(df)

# 3. 하나의 표로 합친다
merged_df = pd.concat(all_data, ignore_index=True)

# 4. 부서별 합계처럼 간단한 집계도 바로 가능하다
summary = merged_df.groupby("부서")["실적건수"].sum().reset_index()

# 5. 결과를 새 엑셀 파일로 저장 (시트 2개로 분리)
with pd.ExcelWriter("취합결과.xlsx") as writer:
    merged_df.to_excel(writer, sheet_name="원본취합", index=False)
    summary.to_excel(writer, sheet_name="부서별합계", index=False)

print(f"{len(file_list)}개 파일을 취합했습니다.")

이 스크립트 하나면 파일이 10개든 100개든 실행 시간은 몇 초 차이에 불과합니다. 파일이 늘어나도 사람이 들이는 시간은 똑같이 “실행 버튼 누르기”뿐입니다. 만약 파일마다 열 이름이 조금씩 다르다면, df.rename(columns={...})으로 표준 이름에 맞춰준 뒤 합치는 전처리 단계를 하나 추가하면 됩니다.

자주 만나는 응용: 특정 조건으로 필터링하기

취합한 데이터에서 특정 조건에 맞는 행만 뽑아 별도 보고서를 만드는 것도 흔한 요구사항입니다.

# 실적건수가 0인 부서만 별도로 확인
zero_report = merged_df[merged_df["실적건수"] == 0]
zero_report.to_excel("실적없음_확인필요.xlsx", index=False)

이런 식으로 “조건에 맞는 데이터만 뽑기”, “여러 조건으로 그룹핑해서 집계하기” 같은 요청은 대부분 pandas 문법 한두 줄로 해결됩니다.

도입 효과와 주의할 점

이 방식을 도입한 기관에서는 하루 넘게 걸리던 취합 작업이 스크립트 실행 시간(수초~수십초) 수준으로 줄었습니다. 담당자가 바뀌어도 스크립트 파일과 사용법 문서만 인계하면 동일한 결과를 재현할 수 있다는 점도 실무에서 체감이 큰 부분입니다. 사람이 할 일은 예외 상황(파일 형식이 완전히 다른 경우 등)을 확인하고 최종 결과를 검토하는 것으로 바뀝니다.

다만 주의할 점도 있습니다. 첫째, 원본 파일의 열 이름이나 시트 구성이 표준화되어 있지 않으면 스크립트가 예상치 못한 오류를 낼 수 있으므로, 처음 도입할 때는 예외 처리 로직(빈 파일, 헤더 위치가 다른 파일 등)을 함께 만들어야 합니다. 둘째, 자동화 스크립트는 “결과가 맞는지 검증하는 절차”가 없으면 오히려 잘못된 숫자를 대량으로 퍼뜨릴 위험이 있습니다. 초기에는 자동화 결과와 기존 수작업 결과를 몇 차례 대조해 신뢰도를 확인하는 과정이 필요합니다. 셋째, 담당자가 파이썬 코드를 전혀 모른 채로 스크립트만 넘겨받으면 파일 경로가 바뀌거나 엑셀 버전이 달라졌을 때 스스로 문제를 해결하지 못합니다. 간단한 사용법과 오류 발생 시 확인할 지점 정도는 문서로 남겨두는 것이 좋습니다.

이런 반복 업무 자동화는 거창한 시스템 구축 없이도 실무자 한 명의 파이썬 스크립트만으로 시작할 수 있는 경우가 많습니다. 저희 픽셀앤코드는 이런 사무 자동화 스크립트 설계부터, 담당자가 직접 유지보수할 수 있도록 돕는 실무 교육까지 함께 진행하고 있습니다. 반복 업무로 시간을 뺏기고 계신 부서가 있다면 가볍게 문의해 주셔도 좋습니다.