엑셀 매크로(VBA) 보안 경고 끝! 파이썬으로 똑같은 작업 대체하기
엑셀 매크로(VBA) 보안 경고 끝! 파이썬으로 똑같은 작업 대체하기 (완성 코드 공개)
"매크로가 포함된 파일을 다른 사람에게 보내면 보안 경고 때문에 매크로 사용 설정을 매번 따로 해야 한다", "VBA 코드가 회사 PC마다 다르게 작동해서 디버깅이 어렵다", "매크로를 쓰는 동료가 퇴사하면 그 파일을 아무도 수정하지 못한다"…
VBA 매크로는 엑셀 안에서 바로 실행되는 장점이 있지만, 보안 정책으로 차단되거나, 회사 PC마다 설정이 달라 오작동하거나, 코드 관리가 어려운 한계가 있습니다. 이 글에서는 이 블로그에서 지금까지 소개한 파이썬 코드들이 VBA의 어떤 기능을 대체할 수 있는지 비교하고, 대표적인 매크로 작업을 파이썬으로 구현하는 방법을 소개합니다.
VBA 매크로 vs 파이썬 비교
VBA 매크로 파이썬 실행 환경 엑셀 안에서만 동작 독립적으로 어디서나 동작 보안 경고 매번 발생, 차단 가능 해당 없음 배포 파일에 코드 포함 스크립트 파일만 공유 디버깅 엑셀 VBA 편집기 사용 다양한 코드 에디터 사용 가능 다른 프로그램 연동 제한적 (Win API 필요) 매우 풍부함 (이메일, 웹, DB 등) 버전 관리(깃 등) 거의 불가능 일반적인 코드처럼 관리 가능 배우는 난이도 엑셀에 특화된 문법 범용 프로그래밍 언어, 활용도 넓음
💡 언제 VBA가 더 나을까: 엑셀을 열자마자 버튼 클릭으로 즉시 실행하고 싶거나, 엑셀 전용 UI(사용자 정의 양식)가 필요한 경우는 VBA가 더 간단할 수 있습니다. 하지만 안정성, 보안, 확장성을 고려하면 대부분의 반복 작업은 파이썬이 더 유리합니다.
대표 매크로 작업 1 — 여러 시트 합치기
VBA로 흔히 작성하는 "모든 시트를 하나로 합치는" 매크로입니다. 파이썬으로는 이렇게 구현합니다.
import pandas as pd
INPUT_PATH = r"C:\Users\내이름\Desktop\월별데이터.xlsx"
xl = pd.ExcelFile(INPUT_PATH, engine="openpyxl")
all_data = []
for sheet_name in xl.sheet_names:
df = pd.read_excel(INPUT_PATH, sheet_name=sheet_name, engine="openpyxl")
df["시트명"] = sheet_name
all_data.append(df)
combined = pd.concat(all_data, ignore_index=True)
combined.to_excel(r"C:\Users\내이름\Desktop\통합결과.xlsx", index=False)
print(f"✅ {len(xl.sheet_names)}개 시트 통합 완료: 총 {len(combined)}행")
VBA로 작성하면 For Each Worksheet 반복문과 Range.Copy를 여러 번 써야 하지만, 파이썬은 단 몇 줄로 끝납니다. 자세한 내용은 엑셀 멀티 시트 처리 편을 참고하세요.
대표 매크로 작업 2 — 조건에 맞는 행만 다른 시트로 복사
VBA로 자주 만드는 "조건부 필터링 후 복사" 매크로입니다.
import pandas as pd
df = pd.read_excel(r"C:\Users\내이름\Desktop\거래처현황.xlsx", engine="openpyxl")
# 조건: 매출금액이 100만원 이상이고 미납 상태인 거래처만 추출
filtered = df[(df["매출금액"] >= 1_000_000) & (df["납부상태"] == "미납")]
with pd.ExcelWriter(r"C:\Users\내이름\Desktop\필터결과.xlsx", engine="openpyxl") as writer:
df.to_excel(writer, sheet_name="전체", index=False)
filtered.to_excel(writer, sheet_name="미납고액", index=False)
print(f"✅ 조건에 맞는 {len(filtered)}건을 별도 시트로 분리 완료")
VBA의 AutoFilter와 SpecialCells를 조합하는 복잡한 코드 없이, 조건문 한 줄로 동일한 결과를 만듭니다. 더 다양한 조건 조합은 엑셀 자동 정렬·필터링 편을 참고하세요.
대표 매크로 작업 3 — 셀 서식·조건부 강조 자동 적용
특정 조건의 셀에 색상을 입히는 매크로도 파이썬으로 동일하게 처리할 수 있습니다.
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Font
wb = load_workbook(r"C:\Users\내이름\Desktop\거래처현황.xlsx")
ws = wb.active
red_fill = PatternFill(fill_type="solid", fgColor="FFD7D7")
red_font = Font(color="CC0000", bold=True)
for row in range(2, ws.max_row + 1):
status_cell = ws.cell(row=row, column=5) # E열: 납부상태라고 가정
if status_cell.value == "미납":
for col in range(1, ws.max_column + 1):
ws.cell(row=row, column=col).fill = red_fill
status_cell.font = red_font
wb.save(r"C:\Users\내이름\Desktop\거래처현황_강조.xlsx")
print("✅ 미납 거래처 행 강조 완료")
대표 매크로 작업 4 — 매번 실행하는 "일괄 작업" 버튼 대체하기
VBA에서 버튼을 눌러 여러 작업을 순서대로 실행하는 매크로는, 파이썬에서 함수를 순서대로 호출하는 메인 스크립트로 대체할 수 있습니다.
def step1_merge_sheets():
print("1단계: 시트 통합 중...")
# 시트 통합 코드
def step2_filter_data():
print("2단계: 데이터 필터링 중...")
# 필터링 코드
def step3_apply_formatting():
print("3단계: 서식 적용 중...")
# 서식 적용 코드
def step4_save_report():
print("4단계: 최종 보고서 저장 중...")
# 저장 코드
# 메인 실행: 버튼 클릭 한 번처럼 순서대로 전체 실행
if __name__ == "__main__":
step1_merge_sheets()
step2_filter_data()
step3_apply_formatting()
step4_save_report()
print("\n✅ 전체 작업 완료!")
이 스크립트를 바로가기로 바탕화면에 두면 더블클릭 한 번으로 매크로 버튼과 동일한 효과를 냅니다.
VBA에서 파이썬으로 전환할 때 주의할 점
1. 엑셀이 열려 있는 상태에서 동시에 파일을 수정하지 않기
파이썬으로 파일을 처리하는 동안 같은 파일을 엑셀에서 열어두면 저장 오류가 발생할 수 있습니다. 작업 전 반드시 엑셀에서 해당 파일을 닫아두세요.
2. 셀 서식이 일부 유지되지 않을 수 있음
복잡한 조건부 서식이나 데이터 유효성 검사 규칙은 openpyxl에서 완벽하게 재현되지 않는 경우가 있습니다. 중요한 서식은 변환 후 직접 확인하세요.
3. 매크로 버튼 대신 더블클릭 실행 환경 만들기
비개발자 동료가 사용해야 한다면, .py 파일을 더블클릭으로 실행할 수 있게 배치 파일(.bat)을 만들어주는 것이 편리합니다:
@echo off python "C:\Users\내이름\Desktop\자동화\main.py" pause
이 내용을 메모장에 입력하고 실행.bat으로 저장하면, 더블클릭만으로 파이썬 스크립트가 실행됩니다.
💡 이 블로그의 다른 편과 결합하면: 스케줄러 편과 결합하면 VBA의 "워크북 열 때 자동 실행" 기능까지 대체할 수 있고, 엑셀 함수 자동 삽입 편과 결합하면 매크로로 만들던 수식 자동화도 함께 처리할 수 있습니다.
핵심 요약
- VBA의 한계: 보안 경고, PC별 호환성 문제, 버전 관리 어려움, 엑셀에 종속
- 파이썬의 장점: 독립 실행, 보안 경고 없음, 다양한 외부 시스템 연동 가능
- 전환 방법: 시트 통합·필터링·서식 적용·일괄 작업 모두 동일하게 구현 가능
- 실행 편의성: .bat 파일로 더블클릭 실행 환경 구성
이 블로그에 지금까지 소개된 50여 개의 파이썬 자동화 코드들이 사실상 회사에서 흔히 쓰는 VBA 매크로 작업 대부분을 대체할 수 있습니다.
