엑셀 매크로(VBA) 보안 경고 끝! 파이썬으로 똑같은 작업 대체하기

이미지
엑셀 매크로(VBA) 보안 경고 끝! 파이썬으로 똑같은 작업 대체하기 (완성 코드 공개) "매크로가 포함된 파일을 다른 사람에게 보내면 보안 경고 때문에 매크로 사용 설정을 매번 따로 해야 한다", "VBA 코드가 회사 PC마다 다르게 작동해서 디버깅이 어렵다", "매크로를 쓰는 동료가 퇴사하면 그 파일을 아무도 수정하지 못한다"… VBA 매크로는 엑셀 안에서 바로 실행되는 장점이 있지만, 보안 정책으로 차단되거나, 회사 PC마다 설정이 달라 오작동하거나, 코드 관리가 어려운 한계가 있습니다. 이 글에서는 이 블로그에서 지금까지 소개한 파이썬 코드들이 VBA의 어떤 기능을 대체할 수 있는지 비교하고, 대표적인 매크로 작업을 파이썬으로 구현하는 방법을 소개합니다. VBA 매크로 vs 파이썬 비교 VBA 매크로 파이썬 실행 환경 엑셀 안에서만 동작 독립적으로 어디서나 동작 보안 경고 매번 발생, 차단 가능 해당 없음 배포 파일에 코드 포함 스크립트 파일만 공유 디버깅 엑셀 VBA 편집기 사용 다양한 코드 에디터 사용 가능 다른 프로그램 연동 제한적 (Win API 필요) 매우 풍부함 (이메일, 웹, DB 등) 버전 관리(깃 등) 거의 불가능 일반적인 코드처럼 관리 가능 배우는 난이도 엑셀에 특화된 문법 범용 프로그래밍 언어, 활용도 넓음 💡 언제 VBA가 더 나을까: 엑셀을 열자마자 버튼 클릭으로 즉시 실행하고 싶거나, 엑셀 전용 UI(사용자 정의 양식)가 필요한 경우는 VBA가 더 간단할 수 있습니다. 하지만 안정성, 보안, 확장성을 고려하면 대부분의 반복 작업은 파이썬이 더 유리합니다. 대표 매크로 작업 1 — 여러 시트 합치기 VBA로 흔히 작성하는 "모...

수백 개 엑셀 파일, 파이썬으로 1초 만에 하나로 합치기

수백 개 엑셀 파일, 파이썬으로 1초 만에 하나로 합치기 (완성 코드 공개)

"1분기_매출_현황.xlsx", "2분기_매출_현황.xlsx", "지점별_재고_취합.xlsx"…

팀원들이 각자 보낸 수십 개의 엑셀 파일을 일일이 열어 Ctrl+C, Ctrl+V 하다 보면 반드시 실수가 납니다. 데이터를 누락하거나 엉뚱한 행에 붙여넣는 오류는 수동 작업의 숙명입니다. 파이썬을 한 번만 세팅해두면 이 반복 작업을 영구적으로 없앨 수 있습니다.


1단계: 준비물 설치

파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다. 이 항목을 빠뜨리면 나중에 명령어가 작동하지 않습니다.

설치 후 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행합니다:

pip install pandas openpyxl

pandas는 엑셀 데이터를 표 형태로 읽고 쓰는 라이브러리이고, openpyxl은 .xlsx 포맷을 처리하는 엔진입니다. 둘 다 필수입니다.

⚠️ 주의: 합칠 엑셀 파일들이 모두 같은 열 구조(헤더)를 가져야 합니다. 예를 들어 A열=이름, B열=금액 형태가 모든 파일에서 동일해야 합니다. 구조가 다르면 아래 '응용' 섹션을 참고하세요.

2단계: 완성 코드

아래 코드를 그대로 복사해서 메모장에 붙여넣고, merge_excel.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.

import os
import pandas as pd
from pathlib import Path

# ① 설정: 합칠 파일이 있는 폴더 경로를 여기에 입력하세요
FOLDER_PATH = r"C:\Users\내이름\Desktop\엑셀모음"   # ← 본인 경로로 수정
OUTPUT_FILE = "합쳐진_최종_마스터.xlsx"              # ← 결과 파일명

# ② 폴더 안의 모든 엑셀 파일을 찾아서 읽기
all_data = []
folder = Path(FOLDER_PATH)

for file in sorted(folder.glob("*.xlsx")) + sorted(folder.glob("*.xls")):
    try:
        df = pd.read_excel(file, engine="openpyxl")
        df["출처파일"] = file.name   # 어느 파일에서 왔는지 추적
        all_data.append(df)
        print(f"  ✔ {file.name} ({len(df)}행)")
    except Exception as e:
        print(f"  ✘ {file.name} 읽기 실패: {e}")

# ③ 하나로 합치고 저장
if not all_data:
    print("⚠ 엑셀 파일을 찾을 수 없습니다. FOLDER_PATH를 확인하세요.")
else:
    combined = pd.concat(all_data, ignore_index=True)
    output_path = folder / OUTPUT_FILE
    combined.to_excel(output_path, index=False)
    print(f"\n✅ 완료! 총 {len(combined)}행 → {output_path}")

3단계: 실행 방법

  1. 합칠 엑셀 파일들을 하나의 폴더에 모아둡니다.
  2. 코드 ① 설정줄의 FOLDER_PATH에 그 폴더 경로를 넣습니다.
    💡 팁: 윈도우 탐색기에서 폴더를 열고 주소창을 클릭하면 경로를 바로 복사할 수 있습니다.
  3. 터미널에서 아래 명령어로 실행합니다:
python merge_excel.py

정상 실행 시 터미널에 이렇게 출력됩니다:

  ✔ 1분기_매출_현황.xlsx (248행)
  ✔ 2분기_매출_현황.xlsx (301행)
  ✔ 지점별_재고_취합.xlsx (87행)

✅ 완료! 총 636행 → C:\Users\내이름\Desktop\엑셀모음\합쳐진_최종_마스터.xlsx

같은 폴더 안에 합쳐진_최종_마스터.xlsx 파일이 생성됩니다. "출처파일" 열이 자동으로 추가되어 각 행이 어떤 파일에서 왔는지 바로 확인할 수 있습니다.


4단계: 자주 발생하는 오류와 해결법

오류 1: ModuleNotFoundError: No module named 'pandas'

설치 명령어를 실행했는데도 이 오류가 나온다면, 파이썬이 여러 버전 설치된 경우입니다. 아래 명령어로 다시 시도하세요.

python -m pip install pandas openpyxl

오류 2: FileNotFoundError

FOLDER_PATH에 입력한 경로가 틀린 경우입니다. 경로 앞에 r을 붙였는지 확인하세요 (r"C:\..." 형태). r을 붙이지 않으면 백슬래시(\)가 특수문자로 처리되어 경로 인식에 실패합니다.

오류 3: 합쳐진 파일에 열이 뒤섞임

파일마다 열 이름이 다를 때 발생합니다. pd.concat은 열 이름을 기준으로 맞추기 때문에 없는 열은 빈칸으로 채워집니다. 모든 파일의 헤더(1행)가 정확히 일치하는지 먼저 확인하세요.


응용: 파일별로 다른 시트에 저장하고 싶다면

하나의 시트에 전부 합치는 대신, 파일마다 별도 시트로 나눠 저장하는 방법입니다. 위 코드에서 ③ 저장 부분을 아래 코드로 교체하면 됩니다.

with pd.ExcelWriter(folder / "시트별_마스터.xlsx", engine="openpyxl") as writer:
    for file, df in zip(sorted(folder.glob("*.xlsx")), all_data):
        sheet_name = file.stem[:31]   # 엑셀 시트명은 31자 제한
        df.to_excel(writer, sheet_name=sheet_name, index=False)
print("✅ 시트별 저장 완료!")
💡 매달 반복되는 작업이라면: 이 .py 파일을 바탕화면에 저장해두고, 매달 새 엑셀 파일만 폴더에 넣은 뒤 더블클릭하면 됩니다. 한 번 만들어두면 영구적으로 재사용할 수 있습니다.

핵심 요약

  • 준비물: Python + pandas + openpyxl 설치 (pip install pandas openpyxl)
  • 설정: 코드 안의 FOLDER_PATH만 본인 폴더 경로로 수정
  • 실행: 터미널에서 python merge_excel.py 입력
  • 결과: 출처파일 열이 포함된 마스터 엑셀 파일이 같은 폴더에 자동 생성

이 코드를 응용하면 특정 시트만 골라 합치거나, 특정 열만 추출해서 병합하는 것도 가능합니다.

이 블로그의 인기 게시물

느려진 구글 크롬 속도 2배 빨라지는 3가지 설정 방법 (2026년 최신 가이드)

카카오톡 용량 줄이기! 대화방 파일 삭제로 스마트폰 용량 확보법 (1분 해결)

업무 속도 3배 빨라지는 윈도우 기본 캡처 도구 단축키 및 200% 활용 꿀팁