엑셀 날짜가 텍스트로 인식될 때 — AI 로 변환 수식 받고 검산하기
2026.03.05 · 20260325 · 7/8/2026 이 섞인 날짜 열을 진짜 날짜로 바꾸는 수식을 AI 에 받고, 30행 기대값과 13월·2월 30일 같은 이상값으로 검산해 고친 과정입니다.
| A열(텍스트) | 원래 뜻 |
|---|---|
| 2026.03.05 | 2026년 3월 5일 |
| 20260325 | 2026년 3월 25일 |
| 7/8/2026 | 2026년 7월 8일(미국식 월/일) |
| 2026-01-12 | 2026년 1월 12일 |
다른 시스템에서 내려받은 주문일 30행이 이렇게 네 형식으로 섞여 있고 모두 텍스트입니다. 정렬은 글자 순서로 되고, 기간 합계 조건에 걸리지 않습니다. 예시 자료는 가상으로 만든 것입니다.
[1] 텍스트인지부터 확인합니다. 빈 셀에 =COUNT(A2:A31) 을 넣어 0 이면 30개가 모두 숫자(날짜)가 아닌 텍스트입니다.
[2] 형식 예시를 짝으로 넣은 프롬프트를 씁니다. OpenAI 의 프롬프트 엔지니어링 안내는 입력과 원하는 출력의 예시를 보여 주면 모델이 그 패턴을 따른다고 설명합니다. 슬래시가 「월/일」 인지 「일/월」 인지는 데이터만 보고 알 수 없으므로 예시와 문장으로 못 박습니다.
엑셀 시트의 A2:A31 에 다른 시스템에서 내려받은 주문일이 텍스트로 들어 있다. 형식이 네 가지로 섞여 있다.슬래시 형식은 미국식 「월/일/연도」 다. 형식 예시(원본 → 원하는 날짜):2026.03.05 → 2026년 3월 5일20260325 → 2026년 3월 25일7/8/2026 → 2026년 7월 8일2026-01-12 → 2026년 1월 12일 <data>{A열 값 30개를 한 줄에 하나씩}</data> B2 에 넣고 B31 까지 채울 수식 하나를 달라.- 결과는 텍스트가 아니라 엑셀 날짜(일련번호)여야 한다.- PC 의 지역 설정에 따라 월과 일을 다르게 읽을 수 있는 함수(DATEVALUE, VALUE 로 날짜 문자열 읽기)는 쓰지 않는다. 연·월·일을 직접 잘라 DATE 로 만든다.- 네 형식이 아닌 값이 오면 빈 문자열 대신 "확인" 을 돌려준다.- Excel 2016 에도 있는 함수만 쓴다(LET, TEXTSPLIT 금지).- 수식을 먼저 코드 블록으로 주고, 형식별로 어느 부분이 처리하는지 세 줄 이내로 설명하라.[3] Gemini 가 준 수식입니다. 슬래시가 있으면 FIND 로 위치를 찾아 자르고, 10자리 점·하이픈 형식과 8자리 숫자 형식은 LEFT·MID·RIGHT 로 자릅니다.
=IFERROR(IF(ISNUMBER(FIND("/",A2)),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1, … ),IF(AND(LEN(A2)=10,OR(MID(A2,5,1)=".",MID(A2,5,1)="-")),DATE(LEFT(A2,4),MID(A2,6,2),RIGHT(A2,2)),IF(AND(LEN(A2)=8,ISNUMBER(--A2)),DATE(LEFT(A2,4),MID(A2,5,2),RIGHT(A2,2)),"확인"))),"확인")[4] 엑셀 없이 수식을 계산해 검산했습니다. 엑셀 수식을 계산하는 Python 패키지 formulas 로 30행 각각의 결과를 기대값과 비교하고, 뒤에 있을 수 없는 날짜 넷을 덧붙였습니다. 이 패키지는 --"03" 을 숫자로 바꾸지 않아서, 계산용 사본에서만 --X 를 VALUE(X) 로 바꿨습니다.
$ python3 eval_formula.py f1.txt dates.csv 13/5/2026 20261305 2/30/2026 2026.02.2930 rows, 0 differextra 13/5/2026 -> 2027-01-05extra 20261305 -> 2027-01-05extra 2/30/2026 -> 2026-03-02extra 2026.02.29 -> 2026-03-0130행은 모두 맞습니다. 그런데 13월, 2월 30일 같은 값이 「확인」 이 아니라 그럴듯한 날짜가 됩니다. Microsoft 의 DATE 도움말대로 월이 12 를 넘거나 일이 그 달의 일수를 넘으면 다음 해·다음 달로 넘어가기 때문입니다. 원본 시스템이 일/월 순서로 내보낸 행이 섞여 있으면 오류 없이 틀린 날짜가 됩니다.
[5] 검산 결과를 그대로 붙여 다시 고치게 합니다. 수식과 함께 「13/5/2026 이 2027-01-05 로 바뀌었다, 월이 1~12 이고 일이 그 달에 있는 날일 때만 날짜를 돌려주라」 고 보냈더니, 만든 날짜의 MONTH 가 원본의 월과 같은지 비교하는 조건을 세 갈래에 모두 더했습니다. 수식이 두 배 길어지므로 여기에는 싣지 않습니다. 같은 검산을 다시 돌립니다.
$ python3 eval_formula.py f2.txt dates.csv 13/5/2026 20261305 2/30/2026 2026.02.2930 rows, 0 differextra 13/5/2026 -> 확인extra 20261305 -> 확인extra 2/30/2026 -> 확인extra 2026.02.29 -> 확인[6] 엑셀에서 마지막으로 확인합니다. C2 에 =ISNUMBER(B2) 를 넣어 채운 뒤 =COUNTIF(C2:C31,FALSE) 가 0 인지 봅니다. D2 의 =TEXT(B2,"yyyy-mm-dd") 를 A열 옆에 두고 7/8/2026 처럼 월과 일이 둘 다 12 이하인 행부터 10행을 원본과 맞춰 봅니다. 「확인」 이 나온 행은 원본 시스템에서 그 행의 원래 값을 찾아 손으로 고칩니다.