엑셀 매크로(VBA) 보안 경고 끝! 파이썬으로 똑같은 작업 대체하기
"매달 매출 데이터 행이 늘어날 때마다 합계 수식 범위를 다시 잡아야 한다", "거래처별 금액에 VLOOKUP을 걸어서 할인율을 매번 찾아야 한다", "조건에 따라 다른 결과를 보여주는 IF 수식을 수백 개 행에 똑같이 입력해야 한다"…
엑셀 수식을 셀 하나에 입력하고 드래그해서 채우는 작업은 데이터 양이 적을 때는 괜찮지만, 매번 데이터가 추가되거나 여러 파일에 똑같은 수식을 반복 적용해야 한다면 비효율적입니다. 파이썬을 사용하면 데이터 범위에 정확히 맞춰 수식을 자동으로 삽입할 수 있고, 엑셀에서 열면 일반 수식처럼 그대로 작동합니다.
파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.
터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:
pip install openpyxl pandas
openpyxl은 셀에 수식 텍스트를 직접 입력하는 기능을 지원합니다. 파이썬이 수식을 계산하는 것이 아니라, 엑셀이 인식할 수식 문자열을 셀에 써넣는 방식입니다. 파일을 엑셀로 열면 자동으로 계산됩니다.
💡 이 코드로 할 수 있는 것: SUM, AVERAGE 같은 집계 수식을 데이터 범위에 맞춰 자동 삽입, VLOOKUP으로 다른 시트의 값 참조, IF 조건 수식 일괄 적용, 수식을 행 전체에 자동으로 채우기까지 처리합니다.
아래처럼 1행이 헤더이고 2행부터 데이터가 입력된 형태면 됩니다.
거래처명 단가 수량 금액(수식 채울 열) 상태(수식 채울 열) A주식회사 50000 12 B기술연구소 30000 5 C물산 80000 8
아래 코드를 그대로 복사해서 메모장에 붙여넣고, add_formula.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
# ① 설정
INPUT_PATH = r"C:\Users\내이름\Desktop\거래처계산.xlsx" # ← 처리할 엑셀 경로
OUTPUT_PATH = r"C:\Users\내이름\Desktop\거래처계산_완료.xlsx" # ← 저장 경로
SHEET_NAME = "Sheet1"
# ② 파일 열기
wb = load_workbook(INPUT_PATH)
ws = wb[SHEET_NAME]
max_row = ws.max_row
print(f" ✔ 데이터 로드 완료: {max_row - 1}행 (헤더 제외)")
# ③ 헤더 확인 후 새 열 추가 (D열: 금액, E열: 상태)
ws["D1"] = "금액"
ws["E1"] = "상태"
# ④ 각 행에 수식 삽입 (2행부터 마지막 행까지)
for row in range(2, max_row + 1):
# 금액 = 단가(B) × 수량(C)
ws[f"D{row}"] = f"=B{row}*C{row}"
# 상태: 금액이 50만원 이상이면 "우수거래처", 아니면 "일반거래처"
ws[f"E{row}"] = f'=IF(D{row}>=500000,"우수거래처","일반거래처")'
print(f" ✔ {max_row - 1}개 행에 수식 삽입 완료")
# ⑤ 합계 행 추가 (마지막 행 다음)
total_row = max_row + 1
ws[f"A{total_row}"] = "합계"
ws[f"D{total_row}"] = f"=SUM(D2:D{max_row})"
ws[f"D{total_row}"].font = ws[f"D{total_row}"].font.copy(bold=True)
print(f" ✔ 합계 행 추가 완료 ({total_row}행)")
# ⑥ 저장
wb.save(OUTPUT_PATH)
print(f"\n✅ 완료! 수식 삽입 결과 저장 → {OUTPUT_PATH}")
INPUT_PATH에 처리할 엑셀 파일 경로를 입력합니다.OUTPUT_PATH에 저장할 경로를 입력합니다.B{row}, C{row} 같은 셀 참조를 본인 데이터에 맞게 수정합니다.python add_formula.py
정상 실행 시 터미널에 이렇게 출력됩니다:
✔ 데이터 로드 완료: 3행 (헤더 제외) ✔ 3개 행에 수식 삽입 완료 ✔ 합계 행 추가 완료 (5행) ✅ 완료! 수식 삽입 결과 저장 → C:\Users\내이름\Desktop\거래처계산_완료.xlsx
결과 엑셀 파일을 열면 D열에 단가×수량 수식이, E열에 조건부 IF 수식이 자동으로 채워져 있습니다. 셀을 클릭하면 수식 입력창에 일반적으로 직접 입력한 것과 동일한 수식이 표시됩니다.
오류 1: 엑셀에서 열었을 때 수식이 아니라 텍스트로 표시됨
수식 문자열 앞에 등호(=)가 빠진 경우입니다. 코드에서 f"=B{row}*C{row}"처럼 반드시 등호로 시작해야 엑셀이 수식으로 인식합니다.
오류 2: 결과가 #VALUE! 또는 #REF! 오류로 표시됨
참조한 셀 주소가 실제 데이터와 맞지 않는 경우입니다. 헤더 행이 1행이 아니거나 데이터 시작 행이 다르면 수식의 행 번호를 다시 계산해야 합니다.
오류 3: IF 수식의 한글이 깨지거나 오류 발생
IF 수식 안의 텍스트는 반드시 큰따옴표(")로 감싸야 합니다. 코드에서 파이썬 문자열은 작은따옴표(')로 전체를 감싸고, 안의 텍스트는 큰따옴표를 사용하는 방식(f'=IF(...,"텍스트",...)')을 그대로 따라야 오류가 나지 않습니다.
거래처별 할인율이 별도 시트에 정리되어 있을 때, VLOOKUP으로 자동 연결하는 방법입니다.
# "할인율표" 시트에 거래처명(A열)과 할인율(B열)이 있다고 가정
for row in range(2, max_row + 1):
ws[f"F{row}"] = f'=VLOOKUP(A{row},할인율표!A:B,2,FALSE)'
# 할인 적용 금액 = 금액 × (1 - 할인율)
ws[f"G{row}"] = f"=D{row}*(1-F{row})"
💡 이전 게시글과 결합하면: 엑셀 데이터 자동 입력 편으로 데이터를 채운 뒤 이 코드로 수식까지 자동 삽입하면, 데이터 입력부터 계산까지 완전 자동화된 엑셀 양식을 만들 수 있습니다. 엑셀 차트 대시보드 편과 결합하면 수식으로 계산된 결과를 바로 차트화할 수 있습니다.
이 코드를 응용하면 SUMIF, COUNTIF 같은 조건부 집계 수식이나, 여러 조건을 조합한 복잡한 수식도 자동으로 삽입할 수 있습니다.