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

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

어떤 폴더가 용량을 다 먹고 있을까? 파이썬으로 자동 분석하기

어떤 폴더가 용량을 다 먹고 있을까? 파이썬으로 자동 분석하기 (완성 코드 공개)

파이썬으로 폴더별 용량을 자동으로 분석하고 시각화하는 모습


"디스크 용량이 거의 다 찼는데 어떤 폴더가 그렇게 큰지 모르겠다", "다운로드 폴더가 너무 커진 것 같은데 안의 어떤 하위 폴더가 문제인지 확인하고 싶다", "여러 드라이브의 용량 현황을 정리해서 보고하고 싶다"…

윈도우 탐색기에서 폴더를 하나씩 클릭해 속성을 확인하는 방법은 폴더가 많을수록 시간이 오래 걸립니다. 파이썬을 한 번만 세팅해두면 폴더 전체를 한 번에 스캔해서 용량이 큰 순서대로 정렬하고, 차트로 시각화해서 한눈에 파악할 수 있습니다.


1단계: 준비물 설치

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

용량 분석과 시각화에 필요한 라이브러리를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install pandas openpyxl matplotlib

pandas는 분석 결과를 정리하고 엑셀로 저장하는 데 사용합니다. matplotlib은 용량 데이터를 막대 차트 이미지로 시각화하는 데 사용합니다. 용량 계산 자체는 파이썬 기본 내장 기능(pathlib, os)으로 처리합니다.

💡 이 코드로 할 수 있는 것: 지정한 폴더의 하위 폴더별 용량을 모두 계산해 큰 순서대로 정렬, 결과를 엑셀로 저장, 상위 10개 폴더를 막대 차트로 시각화합니다. 폴더 안에 폴더가 아무리 깊게 있어도 모두 합산해서 계산합니다.

2단계: 완성 코드

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

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

# ① 설정
TARGET_FOLDER = r"C:\Users\내이름\Desktop"        # ← 분석할 폴더 경로
OUTPUT_EXCEL  = r"C:\Users\내이름\Desktop\용량분석_결과.xlsx"
OUTPUT_CHART  = r"C:\Users\내이름\Desktop\용량분석_차트.png"
DEPTH         = 1   # ← 분석할 하위 폴더 깊이 (1: 바로 아래 폴더만, 2: 그 아래까지)
TOP_N         = 15  # ← 차트에 표시할 상위 폴더 개수

# ② 한글 폰트 설정 (차트용)
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

# ③ 폴더 용량 계산 함수 (재귀적으로 모든 하위 파일 합산)
def get_folder_size(path):
    total = 0
    try:
        for item in path.rglob("*"):
            if item.is_file():
                try:
                    total += item.stat().st_size
                except (PermissionError, OSError):
                    pass
    except (PermissionError, OSError):
        pass
    return total

def format_size(bytes_size):
    """바이트를 읽기 쉬운 단위로 변환"""
    for unit in ["B", "KB", "MB", "GB"]:
        if bytes_size < 1024:
            return f"{bytes_size:.1f}{unit}"
        bytes_size /= 1024
    return f"{bytes_size:.1f}TB"

# ④ 지정한 깊이까지 폴더 목록 수집
target = Path(TARGET_FOLDER)
folders_to_check = []

if DEPTH == 1:
    folders_to_check = [f for f in target.iterdir() if f.is_dir()]
else:
    for f in target.iterdir():
        if f.is_dir():
            folders_to_check.append(f)
            for sub in f.iterdir():
                if sub.is_dir():
                    folders_to_check.append(sub)

print(f"  📂 분석할 폴더: {len(folders_to_check)}개\n")

# ⑤ 각 폴더 용량 계산
results = []
for i, folder in enumerate(folders_to_check, 1):
    size_bytes = get_folder_size(folder)
    results.append({
        "폴더경로": str(folder),
        "폴더명":   folder.name,
        "용량(바이트)": size_bytes,
        "용량(읽기쉬운형태)": format_size(size_bytes),
    })
    print(f"  ✔ [{i}/{len(folders_to_check)}] {folder.name}: {format_size(size_bytes)}")

# ⑥ 용량 큰 순서로 정렬
df = pd.DataFrame(results).sort_values("용량(바이트)", ascending=False).reset_index(drop=True)
df["용량(MB)"] = (df["용량(바이트)"] / 1024 / 1024).round(1)
df["용량(GB)"] = (df["용량(바이트)"] / 1024 / 1024 / 1024).round(2)

# ⑦ 엑셀로 저장
df.to_excel(OUTPUT_EXCEL, index=False)
print(f"\n  ✔ 엑셀 저장 완료 → {OUTPUT_EXCEL}")

# ⑧ 상위 N개 폴더 막대 차트 생성
top_df = df.head(TOP_N).sort_values("용량(MB)")   # 차트는 작은 값이 위로 가도록 역순

fig, ax = plt.subplots(figsize=(10, 8))
ax.barh(top_df["폴더명"], top_df["용량(MB)"], color="#4a90d9")
ax.set_xlabel("용량 (MB)", fontsize=12)
ax.set_title(f"상위 {TOP_N}개 폴더 용량 분석", fontsize=16, pad=15)
ax.grid(axis="x", linestyle="--", alpha=0.5)
plt.tight_layout()
plt.savefig(OUTPUT_CHART, dpi=150, bbox_inches="tight")
print(f"  ✔ 차트 저장 완료 → {OUTPUT_CHART}")

total_size = df["용량(바이트)"].sum()
print(f"\n✅ 완료! 전체 용량: {format_size(total_size)} / 분석 폴더: {len(df)}개")

3단계: 실행 방법

  1. 코드 ① 설정의 TARGET_FOLDER에 분석할 폴더 경로를 입력합니다.
  2. DEPTH를 1로 두면 바로 아래 폴더들만, 2로 두면 그 하위 폴더까지 분석합니다.
  3. 터미널에서 아래 명령어로 실행합니다:
python folder_size.py

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

  📂 분석할 폴더: 12개

  ✔ [1/12] 다운로드: 8.4GB
  ✔ [2/12] 문서: 1.2GB
  ✔ [3/12] 사진: 24.7GB
  ...

  ✔ 엑셀 저장 완료 → C:\Users\내이름\Desktop\용량분석_결과.xlsx
  ✔ 차트 저장 완료 → C:\Users\내이름\Desktop\용량분석_차트.png

✅ 완료! 전체 용량: 48.3GB / 분석 폴더: 12개

엑셀 파일에는 폴더별 용량이 큰 순서로 정렬되어 저장되고, 차트 이미지에는 상위 폴더들이 막대 그래프로 시각화되어 한눈에 어떤 폴더가 용량을 많이 차지하는지 확인할 수 있습니다.


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

오류 1: 분석이 너무 오래 걸림

폴더 안에 파일 수가 매우 많거나(수십만 개) 네트워크 드라이브를 분석할 때 시간이 오래 걸립니다. DEPTH를 1로 줄이거나, 분석할 폴더를 더 세분화해서 나눠 실행하세요.

오류 2: PermissionError가 계속 출력됨

시스템 보호 폴더나 다른 사용자 권한의 폴더에 접근할 때 발생합니다. 코드에 이미 예외 처리가 포함되어 있어 해당 폴더는 0바이트로 건너뛰고 계속 진행됩니다. 정확한 용량이 필요하다면 관리자 권한으로 터미널을 실행하세요.

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

한글 폰트 경로가 없을 때 발생합니다. C:\Windows\Fonts\malgun.ttf 파일이 실제로 존재하는지 확인하세요. 없다면 gulim.ttc로 경로를 바꿔서 시도해보세요.


응용: 특정 확장자만 따로 용량 분석하기

동영상, 사진 등 특정 확장자가 차지하는 용량만 따로 분석하고 싶다면 코드 ③ 함수를 아래처럼 수정하세요.

TARGET_EXTENSIONS = {".mp4", ".mov", ".avi"}   # ← 분석할 확장자만 지정

def get_folder_size_by_ext(path, extensions):
    total = 0
    for item in path.rglob("*"):
        if item.is_file() and item.suffix.lower() in extensions:
            try:
                total += item.stat().st_size
            except (PermissionError, OSError):
                pass
    return total
💡 이전 게시글과 결합하면: 용량이 큰 폴더를 찾았다면 중복 파일 자동 삭제 편으로 정리하거나, ZIP 자동 압축 편으로 압축해서 공간을 확보할 수 있습니다.

핵심 요약

  • 준비물: Python + pandas + openpyxl + matplotlib 설치 (pip install pandas openpyxl matplotlib)
  • 설정: TARGET_FOLDER, DEPTH(분석 깊이), TOP_N(차트 표시 개수) 수정
  • 실행: 터미널에서 python folder_size.py 입력
  • 결과: 폴더별 용량이 큰 순서로 정리된 엑셀, 상위 폴더 막대 차트 이미지 자동 생성

이 코드를 응용하면 여러 드라이브를 동시에 분석하거나, 일정 기간 동안 폴더 용량 변화를 추적하는 것도 가능합니다.

이 블로그의 인기 게시물

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

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

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