AI 해결 노트 · 2026-09-18 · 실측 2026-09-18

같은 날짜인데 비교가 안 맞을 때 — 숨은 시간과 표시 형식

한 줄로

화면에 똑같이 2026-09-18 이라고 찍힌 두 칸을 =B2=B3 으로 맞대면 FALSE가 나옵니다. 한쪽에 오후 2시 30분이 붙어 있어서 셀이 든 값은 46283.604166666664 와 46283 이기 때문입니다. 글자로 들어간 날짜, 숫자로 보이는 날짜까지 네 가지를 한 칸씩 넣어 Value2와 표시 형식을 읽어 봤고, INT·DATEVALUE·*1 로 맞추니 전부 TRUE가 됐습니다. 같은 값을 정렬·필터에 걸었더니 필터는 3건, COUNTIF 는 2건을 세면서 서로 다른 줄을 잡았습니다.

증상

실측 환경

항목
OSWindows 11 Home (10.0.26200)
Excel16.0 (빌드 20326), UI 언어 1042(한국어)
조작 방법Excel COM (Excel.Application, Visible=false)로 셀에 값·수식을 넣고 Text·Value2·NumberFormatLocal 을 읽음. 정렬은 ws.Sort 개체, 필터는 Range.AutoFilter
시험 파일직접 만든 더미 X2_43_날짜비교.xlsx (거래처 이름은 가나상사·다라물산처럼 지어낸 값)
로그원자료\excel-date-hidden-time\01_비교_실행로그.txt 외 3건 (02~04). 환경 값은 04_실패재현_로그.txt 의 [0], 정렬·필터 호출은 같은 로그 [5] 에 있습니다

이번 시험에서 엑셀 창을 띄워 메뉴를 눌러 본 것은 아닙니다. 같은 일을 하는 명령을 COM으로 부르고 그 결과 숫자를 읽었습니다. 화면 이름이 쓰시는 판과 다를 수 있습니다.

같은 날로 보이는 네 칸

한 열에 네 가지를 넣었습니다. 시간이 붙은 날짜, 순수 날짜, 글자로 넣고 표시 형식만 날짜로 바꾼 칸, 표시 형식을 「일반」으로 둔 날짜입니다.

네 칸의 화면 값·비교 결과·실제 값·표시 형식을 나란히 놓은 표
네 칸의 화면 값·비교 결과·실제 값·표시 형식을 나란히 놓은 표
셀에 든 것화면=이 칸=B3Value2ISTEXT
B22026-09-18 14:302026-09-18FALSE46283.604166666664FALSE
B32026-09-182026-09-18TRUE46283FALSE
B4'2026-09-18 (글자)2026-09-18FALSE"2026-09-18"TRUE
B52026-09-18, 형식 일반46283TRUE46283FALSE

아래에서 B2·B3·B4·B5는 계속 이 네 칸을 가리킵니다. B2와 B3은 화면 글자가 한 자도 다르지 않은데 비교가 FALSE입니다. B4는 표시 형식을 yyyy-mm-dd 로 바꿔 놨는데도 속은 글자 그대로입니다. B5는 값이 B3과 똑같은데 형식이 일반이라 다섯 자리 숫자로 보입니다.

엑셀은 날짜를 일련번호로 갖고 있습니다. 1899-12-30을 0으로 잡고 센 값이고, 이번 시험에서 2026-09-18은 46283이었습니다. 46283이 든 B3에 =TEXT(B3,"yyyy-mm-dd hh:mm:ss") 를 걸면 2026-09-18 00:00:00 이 돌아옵니다. 하루가 1이니 오후 2시 30분은 14.5시간 ÷ 24 = 0.604166... 이 소수점 아래에 붙습니다. yyyy-mm-dd 표시 형식은 소수점 아래를 화면에 안 보여 줄 뿐 지우지는 않습니다.

시간까지 펴 보면 이렇게 나옵니다.

=TEXT(B2,"yyyy-mm-dd hh:mm:ss")  ->  2026-09-18 14:30:00
=TEXT(B3,"yyyy-mm-dd hh:mm:ss")  ->  2026-09-18 00:00:00
=B2-B3                           ->  0.6041666666642413

두 칸을 빼 보면 무엇이 다른지가 숫자로 나옵니다. 0이 아니면 두 값이 같지 않다는 뜻이고, 차이가 1보다 작으면 날짜는 같고 소수점 아래만 다르다는 뜻입니다. B2와 B3의 차이 0.6041666666642413은 시간 차이입니다. 차이가 1 이상이면 날짜 자체가 다른 것이니, 위처럼 hh:mm:ss 까지 펴서 양쪽을 나란히 보시는 편이 확실합니다.

표시 형식을 바꿔도 글자는 글자입니다

글자로 넣은 B4를 갖고 형식만 이리저리 바꿔 봤습니다.

바꾸기 전  Value2='2026-09-18'  표시 형식 yyyy-mm-dd  ISTEXT=TRUE
일반으로   Value2='2026-09-18'  화면 2026-09-18        ISTEXT=TRUE
날짜로     Value2='2026-09-18'  화면 2026-09-18        ISTEXT=TRUE
다시 입력  Value2=46283         화면 2026-09-18        ISTEXT=FALSE

표시 형식은 화면에 어떻게 보일지를 정하는 것이라 셀 안의 글자를 건드리지 않습니다. 마지막 줄의 「다시 입력」은 그 칸에 들어 있던 글자를 같은 자리에 그대로 다시 써 넣은 것입니다. 그때 비로소 46283이 됐습니다. 값을 새로 입력받는 순간에 엑셀이 날짜로 읽어 들인다는 뜻입니다. 열 전체를 한꺼번에 바꾸는 절차는 이번 시험에서 돌려 보지 않았습니다. 데이터 탭의 텍스트 나누기로 점 찍은 날짜까지 한 번에 바꾼 기록은 엑셀 표 정리 순서 에 있습니다.

이런 칸이 열에 몇 개나 있는지는 =SUMPRODUCT(--ISTEXT(범위)) 로 셉니다. 날짜인지까지 가려 주지는 않고 글자인 칸을 세는 것이라, 날짜만 적어 둔 열에서 이 숫자가 0이 아니면 그만큼이 글자로 들어와 있다는 뜻입니다.

맞추는 법 네 가지

INT·TRUNC·뺄셈·DATEVALUE·곱하기1·SUMPRODUCT 여섯 수식과 그 결과를 적은 표
INT·TRUNC·뺄셈·DATEVALUE·곱하기1·SUMPRODUCT 여섯 수식과 그 결과를 적은 표
문제쓴 수식결과
시간이 붙어 있다=INT(B2)=B3TRUE
시간이 붙어 있다=TRUNC(B2)=B3TRUE
시간이 붙어 있다=B2-B30.604166667
글자로 들어 있다=DATEVALUE(B4)=B3TRUE
글자로 들어 있다=B4*1=B3TRUE
열 전체를 세야 한다=SUMPRODUCT(--(INT(정렬!B2:B8)=DATE(2026,9,18)))3

마지막 줄의 정렬!B2:B8 은 다음 절에 나오는 접수일 일곱 줄입니다.

INT 는 소수점 아래를 버립니다. 날짜 일련번호에서 소수점 아래가 곧 시간이니, INT 를 씌우면 자정으로 내려앉습니다. TRUNC 도 같은 결과였습니다.

=INT(46283.604166666664)   -> 46283
=TRUNC(46283.604166666664) -> 46283
=INT(-1.5)                 -> -2
=TRUNC(-1.5)               -> -1

둘이 갈리는 곳은 음수입니다. INT 는 작은 쪽으로 내리고 TRUNC 는 0 쪽으로 자릅니다. 이번에 넣어 본 날짜 일련번호는 모두 양수였고, 그 범위에서는 두 함수가 같은 값을 돌려줬습니다.

DATEVALUE 는 글자를 일련번호로 바꿔 줍니다. 다만 받아 주는 표기가 정해져 있어서 일곱 가지를 넣어 봤습니다.

셀에 든 글자DATEVALUETIMEVALUE*1
2026-09-182026-09-1800:0046283
2026-09-18 14:302026-09-1814:3046283.604166666664
2026.09.18오류오류오류
2026/09/182026-09-1800:0046283
2026년 9월 18일2026-09-1800:0046283
18-Sep-20262026-09-1800:0046283
20260918오류오류20260918

점으로 찍은 2026.09.18 은 오류였습니다. 시간이 붙은 글자를 넘기면 DATEVALUE 가 날짜만 떼어 오므로, 글자 상태에서는 이 함수 하나로 시간까지 같이 잘립니다. 맨 아래 20260918 은 조심하셔야 합니다. DATEVALUE 는 오류를 내지만 *1 은 이천만이 넘는 숫자를 그냥 돌려줍니다. 날짜로 바뀐 줄 알고 넘어가기 쉬운 자리입니다.

화면 글자끼리 맞대는 방법도 있습니다.

=TEXT(B2,"yyyy-mm-dd")=TEXT(B3,"yyyy-mm-dd")  ->  TRUE
=TEXT(B4,"yyyy-mm-dd")=TEXT(B3,"yyyy-mm-dd")  ->  TRUE

TEXT 로 양쪽을 같은 모양의 글자로 만들어 놓고 맞대는 것입니다. 시간이 붙은 B2와 글자로 든 B4를 이렇게 비교했더니 둘 다 TRUE가 나왔습니다. 다만 TEXT 가 돌려주는 값은 글자입니다. 그 열을 그대로 두고 날짜 계산을 이어 붙이면 위 DATEVALUE 표에서 본 문제를 다시 만나게 되니, 표에 남겨 계속 쓸 열이면 INT 쪽이 낫습니다. 한 번 보고 말 확인이면 TEXT 가 편합니다.

정렬에서 벌어지는 일

거래처 일곱 곳의 접수일을 넣었습니다. 네 칸은 진짜 날짜, 세 칸은 글자입니다. 글자 세 칸도 표시 형식을 yyyy-mm-dd 로 맞춰 놔서 화면으로는 구분이 안 됩니다.

접수일 오름차순 정렬 전과 후를 나란히 놓고, 정렬 뒤 칸마다 실제 값을 적은 표
접수일 오름차순 정렬 전과 후를 나란히 놓고, 정렬 뒤 칸마다 실제 값을 적은 표
정렬 뒤 차례거래처화면셀이 든 값
1다라물산2026-09-1746282
2카타상회2026-09-1846283
3가나상사2026-09-1846283.604166666664
4사아산업2026-09-2046285
5마바기업2026-09-05글자 2026-09-05
6타파상사2026-09-18글자 2026-09-18
7자차테크2026-09-30글자 2026-09-30

글자 세 칸이 값과 상관없이 끝으로 몰렸습니다. 오름차순에서 숫자가 먼저 서고 글자가 뒤에 서기 때문에, 9월 5일이 9월 20일 아래로 내려갑니다. 여기서는 표시 형식까지 날짜로 맞춰 놔서 화면만 보고는 왜 이렇게 섰는지 알 수 없습니다.

2·3번 줄도 봐 두실 만합니다. 둘 다 화면은 9월 18일인데 값이 46283(0시)인 카타상회가 앞, 46283.604166666664(오후 2시 30분)인 가나상사가 뒤로 섰습니다. 같은 날 안에서 차례가 뒤바뀌는 것처럼 보이는 일이 여기서 생깁니다.

필터와 수식이 서로 다른 답을 냅니다

같은 일곱 줄에 「접수일이 2026-09-18」 조건을 걸었습니다. 자동 필터에 Criteria1:="2026-09-18" 을 넘긴 결과와, 수식으로 센 결과입니다.

센 방법건수잡힌 줄
자동 필터 Criteria1:="2026-09-18"3카타상회 · 가나상사 · 타파상사
=COUNTIF(B2:B8,DATE(2026,9,18))2카타상회 · 타파상사
=COUNTIFS(B2:B8,">="&DATE(2026,9,18),B2:B8,"<"&DATE(2026,9,19))2카타상회 · 가나상사
=SUMPRODUCT(--(INT(B2:B8)=DATE(2026,9,18)))3카타상회 · 가나상사 · 타파상사

한 줄씩 떼어 재 보니 갈리는 자리가 분명했습니다. COUNTIF 는 글자로 된 타파상사를 세면서 시간이 붙은 가나상사를 빠뜨렸고, ">="&DATE 는 가나상사를 세면서 타파상사를 빠뜨렸습니다. 가운데 두 줄은 건수가 똑같이 2인데 센 줄이 다릅니다. 숫자만 맞춰 보고 넘어가면 못 잡습니다.

필터로 3건을 보고 보고서에 「9월 18일 접수 3건」이라고 적었는데 옆자리에서 COUNTIF 로 2건을 뽑아 오면, 둘 중 누가 틀린 것이 아니라 열 안에 형태가 섞여 있는 것입니다. 이 일곱 줄에서는 =SUMPRODUCT(--(INT(B2:B8)=DATE(2026,9,18))) 가 글자로 든 줄과 시간이 붙은 줄을 함께 세어 3으로 모았습니다.

결과

센 것
접수일 칸 수7
숫자(날짜)로 들어 있는 칸4
글자로 들어 있는 칸3
필터로 고른 9월 18일3건
COUNTIF 로 센 9월 18일2건
INT 로 자르고 센 9월 18일3건

열을 받자마자 =SUMPRODUCT(--ISTEXT(범위))=SUMPRODUCT(--ISNUMBER(범위)) 를 한 번씩 찍어 보십시오. 둘 다 0보다 크면 한 열에 글자와 숫자가 섞여 있다는 뜻입니다. 이 표에서는 3과 4가 나왔습니다.

실패한 것

---- ws.Range("A1").NumberFormat = "General"
결과: 실패
  (-2147352567, '예외가 발생했습니다.', (0, 'Microsoft Excel',
   'Range 클래스 중 NumberFormat 속성을 설정할 수 없습니다.', 'xlmain11.chm', 0, -2146827284), None)
---- ws.Range("A1").NumberFormatLocal = "G/표준"   결과: 성공 -> 'G/표준'
---- ws.Range("A2").NumberFormat = "@"            결과: 성공 -> '@'
넣은 값 2026-09-18 14:30   -> 셀 Text='2026-09-18 05:30:00'  Value2=46283.229166666664
    직접 계산한 값 = 46283.604166666664   차이 = -0.375
넣은 값 2026-09-18 00:00   -> 셀 Text='2026-09-17 15:00:00'  Value2=46282.625
    직접 계산한 값 = 46283.0              차이 = -0.375
Value2 로 넣었을 때        -> 셀 Text='2026-09-18 14:30:00'  Value2=46283.604166666664

확인하지 않은 것

함께 보기