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

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

보고서 차트 만들기 끝! 파이썬으로 엑셀 데이터를 차트 이미지로 자동 저장하기

보고서 차트 만들기 끝! 파이썬으로 엑셀 데이터를 차트 이미지로 자동 저장하기 (완성 코드 공개)

파이썬으로 엑셀 데이터를 차트 이미지로 자동 저장하는 모습


"1월 매출 123만원, 2월 매출 145만원, 3월 매출 98만원…"

매달 엑셀 데이터를 보고 차트를 직접 만들고, 이미지로 저장해서 PPT나 보고서에 붙여넣는 작업을 반복하고 있지는 않으신가요? 데이터가 바뀔 때마다 차트를 다시 그리고, 크기를 맞추고, 다시 저장하는 과정은 단순하지만 생각보다 많은 시간을 잡아먹습니다. 파이썬을 한 번만 세팅해두면 엑셀 파일을 읽어 차트를 자동으로 그리고 이미지 파일로 저장하는 작업을 10초 만에 끝낼 수 있습니다.


1단계: 준비물 설치

파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.

차트 생성에 필요한 라이브러리 두 가지를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install pandas openpyxl matplotlib

pandas는 엑셀 데이터를 읽는 라이브러리이고, openpyxl은 .xlsx 파일을 처리하는 엔진입니다. matplotlib은 차트를 그리고 이미지로 저장하는 라이브러리입니다. 세 가지 모두 무료이며 설치 명령어 한 줄로 한꺼번에 설치됩니다.

💡 이 코드로 할 수 있는 것: 엑셀 파일에서 지정한 두 열(항목명, 수치)을 읽어 막대 차트 또는 꺾은선 차트를 자동으로 그리고 PNG 이미지로 저장합니다. 데이터만 바꾸면 차트가 자동으로 업데이트됩니다.

2단계: 엑셀 파일 준비

코드를 실행하기 전에 엑셀 파일을 아래 형식으로 준비합니다. 1행은 반드시 헤더(열 이름)로, 2행부터 실제 데이터를 입력합니다.

A열(항목)    B열(수치)
----------------------------
1월          1230000
2월          1450000
3월          980000
4월          1620000
5월          1380000

열 이름은 자유롭게 바꿀 수 있습니다. 코드에서 열 이름을 지정하기 때문에 "월별매출", "지점명", "수량" 등 어떤 이름을 사용해도 됩니다.


3단계: 완성 코드

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

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from pathlib import Path

# ① 설정: 파일 경로와 열 이름
EXCEL_PATH  = r"C:\Users\내이름\Desktop\매출데이터.xlsx"  # ← 본인 엑셀 파일 경로
OUTPUT_PATH = r"C:\Users\내이름\Desktop\매출차트.png"     # ← 저장할 이미지 경로
X_COLUMN    = "항목"    # ← 가로축(항목명)으로 쓸 열 이름
Y_COLUMN    = "수치"    # ← 세로축(수치)으로 쓸 열 이름
CHART_TYPE  = "bar"     # ← "bar"(막대) 또는 "line"(꺾은선) 선택
CHART_TITLE = "월별 매출 현황"   # ← 차트 제목

# ② 한글 폰트 설정 (윈도우 기준)
font_path = "C:/Windows/Fonts/malgun.ttf"   # 맑은 고딕
if Path(font_path).exists():
    font = fm.FontProperties(fname=font_path)
    plt.rcParams["font.family"] = font.get_name()
plt.rcParams["axes.unicode_minus"] = False  # 마이너스 기호 깨짐 방지

# ③ 엑셀 읽기
df = pd.read_excel(EXCEL_PATH, engine="openpyxl")
print(f"  ✔ 데이터 로드 완료: {len(df)}행")

# ④ 차트 그리기
fig, ax = plt.subplots(figsize=(10, 6))

if CHART_TYPE == "bar":
    ax.bar(df[X_COLUMN], df[Y_COLUMN], color="#4a90d9", edgecolor="white")
elif CHART_TYPE == "line":
    ax.plot(df[X_COLUMN], df[Y_COLUMN], marker="o", color="#4a90d9", linewidth=2)

ax.set_title(CHART_TITLE, fontsize=16, pad=15)
ax.set_xlabel(X_COLUMN, fontsize=12)
ax.set_ylabel(Y_COLUMN, fontsize=12)
ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"{int(x):,}"))
ax.grid(axis="y", linestyle="--", alpha=0.5)
plt.tight_layout()

# ⑤ 이미지로 저장
plt.savefig(OUTPUT_PATH, dpi=150, bbox_inches="tight")
print(f"\n✅ 완료! 차트 이미지 저장 → {OUTPUT_PATH}")

4단계: 실행 방법

  1. 엑셀 파일을 준비하고 코드 ① 설정의 EXCEL_PATH에 파일 경로를 입력합니다.
  2. OUTPUT_PATH에 저장할 이미지 파일 경로를 입력합니다.
  3. X_COLUMNY_COLUMN에 엑셀 헤더 이름을 정확히 입력합니다.
    💡 팁: 엑셀 파일을 열어 1행에 적힌 열 이름을 그대로 복사하면 오타를 방지할 수 있습니다.
  4. 터미널에서 아래 명령어로 실행합니다:
python make_chart.py

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

  ✔ 데이터 로드 완료: 5행

✅ 완료! 차트 이미지 저장 → C:\Users\내이름\Desktop\매출차트.png

지정한 경로에 PNG 이미지 파일이 생성됩니다. 이 이미지를 바로 PPT, 워드, 카카오톡 등에 붙여넣을 수 있습니다.


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

오류 1: KeyError: '항목'

코드의 X_COLUMN에 입력한 열 이름이 엑셀 헤더와 정확히 일치하지 않을 때 발생합니다. 엑셀 1행의 열 이름을 다시 확인하세요. 공백이 한 칸이라도 다르면 오류가 납니다.

오류 2: 차트에 한글이 깨져서 네모(□)로 표시됨

코드 ② 한글 폰트 설정에서 지정한 폰트 경로가 없을 때 발생합니다. 윈도우 탐색기에서 C:\Windows\Fonts\malgun.ttf 파일이 실제로 존재하는지 확인하세요. 파일이 없다면 gulim.ttc 또는 batang.ttc로 바꿔서 시도해보세요.

오류 3: ModuleNotFoundError: No module named 'matplotlib'

설치가 제대로 되지 않은 경우입니다. 아래 명령어로 다시 시도하세요.

python -m pip install pandas openpyxl matplotlib

응용: 막대와 꺾은선을 동시에 표시하고 싶다면

매출 수치는 막대로, 전월 대비 증감률은 꺾은선으로 함께 표시하는 이중 차트도 만들 수 있습니다. 코드 ④ 차트 그리기 부분을 아래처럼 교체하세요. 엑셀에 "수치2" 열이 추가로 있어야 합니다.

Y_COLUMN2 = "증감률"   # ← 꺾은선으로 표시할 두 번째 열 이름

fig, ax1 = plt.subplots(figsize=(10, 6))

ax1.bar(df[X_COLUMN], df[Y_COLUMN], color="#4a90d9", label=Y_COLUMN)
ax1.set_ylabel(Y_COLUMN, fontsize=12)

ax2 = ax1.twinx()   # 오른쪽에 두 번째 Y축 추가
ax2.plot(df[X_COLUMN], df[Y_COLUMN2], marker="o", color="#e84c3d", linewidth=2, label=Y_COLUMN2)
ax2.set_ylabel(Y_COLUMN2, fontsize=12)

ax1.set_title(CHART_TITLE, fontsize=16, pad=15)
fig.legend(loc="upper left", bbox_to_anchor=(0.1, 0.9))
plt.tight_layout()
💡 매달 반복되는 보고서 작업이라면: 엑셀 데이터만 새 내용으로 업데이트하고 스크립트를 실행하면 차트 이미지가 자동으로 덮어씌워집니다. 이전 게시글 엑셀 파일 자동 병합 편과 결합하면 여러 파일을 합친 뒤 바로 차트까지 자동 생성하는 것도 가능합니다.

핵심 요약

  • 준비물: Python + pandas + openpyxl + matplotlib 설치 (pip install pandas openpyxl matplotlib)
  • 설정: 엑셀 파일 경로, 저장 경로, 열 이름, 차트 종류만 수정
  • 실행: 터미널에서 python make_chart.py 입력
  • 결과: 엑셀 데이터가 차트 PNG 이미지로 자동 저장, 보고서에 바로 삽입 가능

이 코드를 응용하면 파이 차트(원형 차트), 여러 시트의 데이터를 한 번에 차트로 변환하는 것도 가능합니다.

이 블로그의 인기 게시물

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

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

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