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

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

엑셀 안에 진짜 차트 자동 삽입! 파이썬으로 대시보드 만들기

엑셀 안에 진짜 차트 자동 삽입! 파이썬으로 대시보드 만들기 (완성 코드 공개)

파이썬으로 엑셀 안에 차트를 자동으로 삽입해 대시보드를 만드는 모습


이전 게시글 엑셀 데이터 차트 이미지 자동 저장 편에서는 차트를 PNG 이미지로 만드는 방법을 소개했습니다. 이미지는 보고서에 붙여넣기 좋지만, 데이터가 바뀌면 차트를 다시 그려야 합니다. 이번 글에서는 엑셀 파일 안에 진짜로 살아있는 차트를 자동으로 삽입하는 방법을 소개합니다. 엑셀에서 직접 열어보면 일반적으로 차트 마법사로 만든 것과 똑같이 더블클릭해서 수정하거나 데이터 범위를 바꿀 수 있습니다.


1단계: 준비물 설치

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

터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install openpyxl pandas

openpyxl은 엑셀 파일 안에 네이티브 차트 객체를 직접 생성하는 기능을 지원합니다. matplotlib처럼 이미지를 그리는 것이 아니라, 엑셀이 인식하는 진짜 차트 데이터를 만듭니다. pandas는 원본 데이터를 읽는 데 사용합니다.

💡 이 코드로 만들 수 있는 차트: 막대 차트, 꺾은선 차트, 원형 차트, 영역 차트를 자동으로 생성하고 한 시트에 여러 차트를 배치해 대시보드 형태로 구성할 수 있습니다. 엑셀에서 더블클릭하면 차트 종류·색상·데이터 범위를 직접 수정할 수 있습니다.

2단계: 엑셀 파일 준비

아래처럼 1행이 헤더이고 2행부터 데이터가 입력된 형태면 됩니다.

월      매출       비용       순이익
1월    5,200,000  3,100,000  2,100,000
2월    6,800,000  3,500,000  3,300,000
3월    4,900,000  2,900,000  2,000,000
4월    7,400,000  4,100,000  3,300,000

3단계: 완성 코드

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

from openpyxl import load_workbook
from openpyxl.chart import BarChart, LineChart, PieChart, Reference
from openpyxl.chart.label import DataLabelList
import pandas as pd
from pathlib import Path

# ① 설정
INPUT_PATH  = r"C:\Users\내이름\Desktop\월별매출.xlsx"      # ← 원본 데이터 엑셀
OUTPUT_PATH = r"C:\Users\내이름\Desktop\대시보드.xlsx"      # ← 결과 저장 경로
SHEET_NAME  = "데이터"   # ← 데이터가 있는 시트명

# ② 데이터를 시트에 쓰기 (없으면 새로 작성)
df = pd.read_excel(INPUT_PATH, engine="openpyxl")
print(f"  ✔ 데이터 로드 완료: {len(df)}행")

with pd.ExcelWriter(OUTPUT_PATH, engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name=SHEET_NAME, index=False)

# ③ 저장된 파일을 다시 열어 차트 삽입
wb = load_workbook(OUTPUT_PATH)
ws = wb[SHEET_NAME]

max_row = ws.max_row
max_col = ws.max_column

# ④ 막대 차트: 월별 매출·비용·순이익 비교
bar_chart = BarChart()
bar_chart.title = "월별 매출·비용·순이익"
bar_chart.style = 10
bar_chart.x_axis.title = "월"
bar_chart.y_axis.title = "금액(원)"
bar_chart.width  = 18
bar_chart.height = 10

data  = Reference(ws, min_col=2, max_col=max_col, min_row=1, max_row=max_row)
cats  = Reference(ws, min_col=1, min_row=2, max_row=max_row)
bar_chart.add_data(data, titles_from_data=True)
bar_chart.set_categories(cats)
ws.add_chart(bar_chart, "F2")   # F2 셀 위치에 차트 삽입
print(f"  ✔ 막대 차트 삽입 완료")

# ⑤ 꺾은선 차트: 순이익 추이
line_chart = LineChart()
line_chart.title = "순이익 추이"
line_chart.style = 12
line_chart.x_axis.title = "월"
line_chart.y_axis.title = "순이익(원)"
line_chart.width  = 18
line_chart.height = 10

profit_data = Reference(ws, min_col=4, max_col=4, min_row=1, max_row=max_row)
line_chart.add_data(profit_data, titles_from_data=True)
line_chart.set_categories(cats)
ws.add_chart(line_chart, "F22")   # 막대 차트 아래쪽에 배치
print(f"  ✔ 꺾은선 차트 삽입 완료")

# ⑥ 원형 차트: 항목별 비율 (마지막 행 기준 매출·비용·순이익 비율)
pie_chart = PieChart()
pie_chart.title = "최근 월 매출 구성"
pie_chart.width  = 12
pie_chart.height = 10

pie_data = Reference(ws, min_col=2, max_col=4, min_row=max_row, max_row=max_row)
pie_labels = Reference(ws, min_col=2, max_col=4, min_row=1, max_row=1)
pie_chart.add_data(pie_data, titles_from_data=False)
pie_chart.set_categories(pie_labels)
pie_chart.dataLabels = DataLabelList()
pie_chart.dataLabels.showPercent = True
ws.add_chart(pie_chart, "P2")   # 막대 차트 옆쪽에 배치
print(f"  ✔ 원형 차트 삽입 완료")

# ⑦ 저장
wb.save(OUTPUT_PATH)
print(f"\n✅ 완료! 대시보드 저장 → {OUTPUT_PATH}")

4단계: 실행 방법

  1. 코드 ① 설정의 INPUT_PATH에 원본 데이터 엑셀 경로를 입력합니다.
  2. OUTPUT_PATH에 차트가 삽입된 결과를 저장할 경로를 입력합니다.
  3. 데이터 열 구조가 다르다면 코드 ④~⑥의 min_col, max_col 값을 본인 데이터에 맞게 조정합니다.
  4. 터미널에서 아래 명령어로 실행합니다:
python excel_dashboard.py

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

  ✔ 데이터 로드 완료: 4행
  ✔ 막대 차트 삽입 완료
  ✔ 꺾은선 차트 삽입 완료
  ✔ 원형 차트 삽입 완료

✅ 완료! 대시보드 저장 → C:\Users\내이름\Desktop\대시보드.xlsx

결과 파일을 엑셀에서 열면 데이터 표 옆에 막대·꺾은선·원형 차트 3개가 자동으로 배치되어 있습니다. 차트를 더블클릭하면 일반 엑셀 차트처럼 색상, 종류, 범례를 직접 수정할 수 있습니다.


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

오류 1: 차트가 빈 화면으로 나오거나 데이터가 표시 안 됨

Referencemin_row, max_row, min_col, max_col이 실제 데이터 범위와 다른 경우입니다. ws.max_rowws.max_column 값을 출력해서 실제 데이터 크기를 먼저 확인하세요.

오류 2: 차트가 표 데이터를 가리며 겹쳐서 표시됨

ws.add_chart(chart, "F2")의 위치 셀 주소가 데이터 영역과 겹치는 경우입니다. 데이터가 A~D열까지 있다면 F열 이후로 차트를 배치해야 겹치지 않습니다.

오류 3: 한글 차트 제목이 깨짐

openpyxl은 한글을 기본 지원하므로 거의 발생하지 않습니다. 만약 깨진다면 코드 파일 저장 시 인코딩이 UTF-8인지 다시 확인하세요.


응용: 차트 색상과 범례 위치 커스터마이징

차트의 색상이나 범례 위치를 세밀하게 조정할 수 있습니다.

from openpyxl.chart.legend import Legend
from openpyxl.drawing.colors import ColorChoice

# 범례를 차트 하단에 배치
bar_chart.legend.position = "b"   # t=상단, b=하단, l=좌측, r=우측

# 막대 색상을 시리즈별로 지정
bar_chart.series[0].graphicalProperties.solidFill = "4A90D9"   # 매출: 블루
bar_chart.series[1].graphicalProperties.solidFill = "E84C3D"   # 비용: 레드
bar_chart.series[2].graphicalProperties.solidFill = "2ECC71"   # 순이익: 그린
💡 이전 게시글과 결합하면: 피벗 테이블 자동 생성 편으로 만든 집계 데이터를 이 코드로 차트화하면 데이터 가공부터 시각화까지 완전 자동화된 보고서를 만들 수 있고, 이메일 자동 발송 편과 결합하면 대시보드 파일을 자동으로 발송할 수 있습니다.

핵심 요약

  • 준비물: Python + openpyxl + pandas 설치 (pip install openpyxl pandas)
  • 설정: INPUT_PATH, OUTPUT_PATH, SHEET_NAME, 차트 데이터 범위 수정
  • 실행: 터미널에서 python excel_dashboard.py 입력
  • 결과: 막대·꺾은선·원형 차트가 포함된 엑셀 대시보드 자동 생성, 엑셀에서 직접 수정 가능

이 코드를 응용하면 영역 차트, 콤보 차트(막대+꺾은선), 스파크라인을 추가하는 것도 가능합니다.

이 블로그의 인기 게시물

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

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

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