중복 파일 삭제 스크립트를 돌렸다가 식은땀 흘린 날
"매달 매출 데이터 행이 늘어날 때마다 합계 수식 범위를 다시 잡아야 한다", "거래처별 금액에 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 같은 조건부 집계 수식이나, 여러 조건을 조합한 복잡한 수식도 자동으로 삽입할 수 있습니다.