업무용 스크립트 요청문에 입력·출력·오류 원칙 담기
“자동화해 줘”를 실행 가능한 작업 설명으로 바꿉니다. 민감정보 없는 합성 샘플과 손으로 확인한 기대 결과를 붙여, 팀별 작업 기록 집계 스크립트를 요청하는 문장을 완성합니다.
정상 데이터 한두 줄에서만 맞는다고 AI가 제안한 Excel 수식을 바로 사용하면 안 됩니다. 작은 합성 시트에서 빈칸, 0, 텍스트, 날짜를 테스트하고 Python으로 의도한 결과를 다시 확인합니다.
이런 분께AI 채팅 도우미로 Excel 수식을 만들고, 실제 업무 파일에 적용하기 전에 예외 입력까지 테스트하려는 실무자를 위한 글입니다.
AI 채팅 도우미가 제안한 Excel 수식은 일반적인 데이터에서는 정상적으로 작동해 보여도, 셀이 비어 있거나 분모가 0이거나 숫자가 들어가야 할 곳에 텍스트가 있거나 날짜가 Excel 일련번호로 저장된 경우에는 전혀 다른 결과를 낼 수 있습니다. 이런 경우는 #DIV/0!이나 #VALUE!처럼 눈에 띄는 오류로만 나타나는 것이 아닙니다. 겉보기에는 그럴듯한 숫자가 나오지만 논리적으로는 잘못된 경우도 있습니다.
아래 예시는 합성 예제입니다. A열에는 이전 값, B열에는 새 값이 있고, C열에서는 (새 값 - 이전 값) / 이전 값으로 변화율을 계산한다고 가정합니다. 업무 규칙은 빈칸이면 빈칸을 유지하고, 분모가 0이거나 숫자가 아닌 값은 CHECK로 표시하며, 날짜는 일반 측정값처럼 계산하지 않는 것입니다.
실제 통합문서에 수식을 적용하기 전에 작은 테스트 시트를 만듭니다. 정상 값과 자주 발생하는 예외를 한 번에 볼 수 있도록 다음과 같은 행을 준비합니다.
| 행 | A: 이전 값 | B: 새 값 | 의도한 결과 |
|---|---|---|---|
| 2 | 100 | 120 | 20% |
| 3 | 50 | 50 | 0% |
| 4 | 25 | blank | |
| 5 | 0 | 10 | CHECK |
| 6 | pending | 10 | CHECK |
| 7 | 100 | n/a | CHECK |
| 8 | 2026-10-01 | 2026-10-08 | CHECK |
처음 두 행은 정상 동작을 확인하기 위한 기준입니다. (120 - 100) / 100 = 0.20이므로 20%이고, (50 - 50) / 50 = 0이므로 0%입니다. 나머지 행은 실제 생산 데이터라기보다 수식이 어떻게 실패하는지 확인하기 위한 테스트입니다.
AI 채팅 도우미에는 다음처럼 단순하게 요청할 수 있습니다. A2에서 B2로의 변화율을 계산하고, 오류가 발생하면 결과를 빈칸으로 표시해 달라고 요청합니다.
이 수식은 100에서 120으로 변하는 경우와 50에서 50으로 변하는 경우에는 잘 작동합니다. 하지만 IFERROR는 서로 다른 여러 문제를 같은 빈칸으로 숨깁니다. 분모가 0인 경우, 텍스트 입력, 다른 수식 오류가 모두 사라져 검토 대상인지 구분하기 어려울 수 있습니다. 더 중요한 점은 Excel에서 날짜가 내부적으로 일련번호로 저장된다는 것입니다. A2와 B2가 실제 Excel 날짜라면, 뺄셈과 나눗셈이 정상적으로 수행되어 명백한 오류 대신 숫자 형태의 변화율이 나올 수 있습니다.
즉, 계산이 성공했다는 사실만으로 입력값의 데이터 유형이 의도에 맞다는 것을 증명할 수는 없습니다.
앞에서 정한 규칙을 기준으로 하면 다음처럼 조금 더 명시적인 수식을 사용할 수 있습니다.
이 수식은 빈칸, 숫자가 아닌 입력, 분모가 0인 경우를 구분합니다. 따라서 2행부터 7행까지는 의도한 규칙대로 동작합니다. C열의 숫자 결과를 20%처럼 표시하려면 Percentage 형식을 적용하면 됩니다.
하지만 8행에서는 중요한 한계가 드러납니다. Excel 날짜는 내부적으로 숫자이므로 실제 날짜 셀에도 ISNUMBER가 TRUE를 반환합니다. 따라서 이 방어적인 수식도 날짜를 숫자로 계산할 수 있습니다. 일반적인 수식만으로는 어떤 숫자 일련번호가 실제 측정값인지, 의도하지 않은 날짜인지 숫자 자체만 보고 안정적으로 판단할 수 없습니다.
두 번째 검증으로 합성 테스트 데이터를 row,old_value,new_value 열을 가진 formula_cases.csv로 저장합니다. 2026-10-01과 2026-10-08은 그대로 유지합니다. 다음 표준 라이브러리 기반 스크립트는 의도한 규칙을 독립적으로 적용합니다. 빈칸은 blank, ISO 형식 날짜는 CHECK, 숫자가 아닌 값은 CHECK, 이전 값이 0이면 CHECK로 처리하고, 정상 숫자에서는 변화율을 계산합니다.
from pathlib import Path
from decimal import Decimal, InvalidOperation
from datetime import date
import csv
import sys
INPUT_PATH = Path("formula_cases.csv")
OUTPUT_DIR = Path("outputs")
REPORT_PATH = OUTPUT_DIR / "formula_check_report.txt"
if not INPUT_PATH.is_file():
sys.exit("Missing input file: formula_cases.csv")
if OUTPUT_DIR.exists():
sys.exit("Stop: outputs folder already exists. Remove or rename it manually first.")
def is_iso_date(value):
try:
date.fromisoformat(value)
return True
except ValueError:
return False
def check_change(old_text, new_text):
old_text = old_text.strip()
new_text = new_text.strip()
if old_text == "" or new_text == "":
return "blank"
if is_iso_date(old_text) or is_iso_date(new_text):
return "CHECK"
try:
old = Decimal(old_text)
new = Decimal(new_text)
except InvalidOperation:
return "CHECK"
if old == 0:
return "CHECK"
change = (new - old) / old * Decimal("100")
return f"{change:.2f}%"
results = []
with INPUT_PATH.open("r", encoding="utf-8", newline="") as file:
reader = csv.DictReader(file)
required = {"row", "old_value", "new_value"}
if reader.fieldnames is None or not required.issubset(reader.fieldnames):
sys.exit("CSV must contain: row, old_value, new_value")
for record in reader:
result = check_change(record["old_value"], record["new_value"])
results.append(
f"Row {record['row']}: "
f"old={record['old_value']!r}, "
f"new={record['new_value']!r} -> {result}"
)
OUTPUT_DIR.mkdir()
REPORT_PATH.write_text("\n".join(results) + "\n", encoding="utf-8")
print(f"Created: {REPORT_PATH}")
이 7개 합성 행에서 예상되는 Python 결과는 순서대로 20.00%, 0.00%, blank, CHECK, CHECK, CHECK, CHECK입니다. Excel에서 오류가 표시되는지만 보지 말고 행별로 결과를 비교하세요.
Python은 같은 업무 규칙을 독립적으로 구현할 수 있다는 점에서 유용합니다. Excel 수식을 문자 그대로 그대로 복제해서는 안 됩니다. 두 구현이 같은 잘못된 가정을 공유하면 교차검증도 동일한 오류를 반복할 수 있습니다.
핵심은 수식 검증이 단순한 문법 문제가 아니라 데이터 유형과 업무 규칙의 문제라는 점입니다. AI가 만든 수식은 초안 구현으로 보고, 엣지케이스 테스트를 통해 실제로 필요한 동작과 일치하는지 확인해야 합니다.
2026-09-21 · hand-checked example · Python 3.12
설명과 예제는 직접 작성했습니다. 관련 동작과 개념은 아래 공식 자료에서 확인할 수 있습니다.