Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기이 글의 목적은 엑셀에서 시간 계산 시 발생하는 음수 시간 표시 불가, #### 오류, #VALUE! 오류, 날짜·시간 혼합 데이터 문제를 체계적으로 진단하고 실무에서 바로 적용 가능한 해결책을 제시하는 것이다.
엑셀은 날짜·시간을 일 단위 연속 실수로 저장한다. 정수부는 날짜, 소수부는 하루 중 경과 비율이다. 예를 들어 0.5는 12:00:00을 의미한다. 1은 하루(24시간)이다. 두 시간의 차이는 단순히 실수의 차이이며, 서식을 시간으로 지정하면 사람이 읽을 수 있는 표기로 보이게 된다.
엑셀 기본 날짜 시스템(Windows 기본)은 1900 날짜 시스템이다. 이 시스템에서 음수 시간은 직접 표시하지 못한다. 즉 계산 결과가 0보다 작으면 셀에는 #### 또는 1900-01-00 형태의 비정상 표시가 나타난다. 이는 표시 문제이며 내부 계산 자체는 유효하다.
| 증상 | 주요 원인 | 즉시 조치 |
|---|---|---|
| 음수 시간 대신 #### 표시 | 1900 날짜 시스템에서 음수 시간 표시 불가 | [방법 A] 1904 날짜 시스템 전환 또는 [방법 B] 수식·서식으로 우회 처리 |
| 야간 근무 종료-시작이 음수 | 종료 시각이 익일인데 날짜가 입력되지 않음 | 종료+1 로 보정하거나 MOD 함수로 24시간 순환 보정 |
| #VALUE! 오류 | 시간이 텍스트로 저장, 공백·문자 혼입, 빈 셀 연산 | TIMEVALUE, VALUE, SUBSTITUTE, TRIM으로 정규화 후 IFERROR로 래핑 |
| 합계가 24시간을 넘으면 00:00으로 리셋 | 표시 서식이 hh:mm 이라 총시간이 24로 나머지 표시됨 | 사용자 지정 서식을 [h]:mm 또는 [h]:mm:ss 로 변경 |
| 1904 전환 후 날짜가 밀림 | 시스템 변경으로 기준점 자체가 이동 | 전환 전 스냅샷 보관, 변환 보정식 적용 또는 시트/통합문서 단위 분리 |
전환 경로는 파일 > 옵션 > 고급 > 이 통합 문서 계산 시 > 1904 날짜 시스템 사용이다. 전환하면 음수 시간 표시가 가능해진다. 다만 모든 날짜가 +1,462일 이동하여 기존 일정·마감일과 불일치가 생길 수 있다.
/* 1900 → 1904 전환 시 날짜 보정 예시 */ 보정날짜 = 원본날짜 - DATE(1904,1,1) + DATE(1900,1,1) + 1462 실무에서는 통합 문서 전체 전환 대신 시트 분리 또는 우회 수식을 우선 고려하는 것이 합리적이다.
시작(B2) 22:00, 종료(C2) 06:00 형태에서 종료가 익일임을 반영한다.
=IF(C2 < B2, C2 + 1, C2) - B2 표시 서식을 [h]:mm 또는 [h]:mm:ss로 지정하면 총시간이 24를 넘어도 누적 표시가 가능하다.
=MOD(C2 - B2, 1) 계산 결과가 음수일 때도 사람이 읽을 수 있는 문자열로 표현한다. 셀 서식 대신 TEXT 함수를 사용한다.
=LET( d, C2 - B2, sign, IF(d < 0, "-", ""), txt, TEXT(ABS(d), "[h]:mm:ss"), sign & txt ) 위 수식은 1900 시스템에서도 "-02:30:00"과 같이 안전하게 표기한다. 합계가 필요하면 별도 숨김 열에 실제 수치(MOD 또는 보정식)를 저장하고 보고용 열은 텍스트를 사용한다.
외부에서 복사한 데이터는 시간처럼 보이는 텍스트가 섞여 있다. 다음 수식으로 정규화한다.
=IFERROR( TIMEVALUE(SUBSTITUTE(TRIM(A2)," ","")), IFERROR(VALUE(A2), "") ) 정규화 후 표시 서식을 h:mm 또는 h:mm:ss로 지정한다. 빈 문자열("")을 반환하여 합계 범위에 포함되지 않게 만든다.
=SUM(D2:D100) // 표시 서식: [h]:mm:ss [h]:mm 또는 [h]:mm:ss 서식은 누적 시간을 24를 기준으로 리셋하지 않고 그대로 보여준다.
=AVERAGE(D2:D100) // 표시 서식: h:mm:ss /* 시/분/초 → 일수(엑셀 내부) */ =TIME(hours, minutes, seconds)
/* 일수 → 초 */
=일수 * 24 * 60 * 60
/* 초 → 표시용 h:mm:ss */
=TEXT(초/86400, "[h]:mm:ss")
/* 시작(B2), 종료(C2), 휴게(D2, 시간 단위) */ =MOD(C2 - B2, 1) - D2/24 // 표시 서식: [h]:mm 야간 기준 22:00~06:00 구간을 분리 계산한다.
=LET( s, B2, e, IF(C2 < B2, C2 + 1, C2), n1, TIME(22,0,0), n2, TIME(6,0,0)+1, /* 근무 구간과 야간 구간의 교집합 */ overlap, MAX(0, MIN(e, n2) - MAX(s, n1)), TEXT(overlap, "[h]:mm") ) =LET(d, 실제도착 - 기준도착, TEXT(ABS(d), "[h]:mm"), IF(d<0, "-"&TEXT(ABS(d),"[h]:mm"), TEXT(d,"[h]:mm"))) 타임스탬프가 "2025-10-25 23:59:59" 텍스트라면 다음을 사용한다.
=IFERROR(VALUE(SUBSTITUTE(A2,"-","/")), DATEVALUE(LEFT(A2,10)) + TIMEVALUE(RIGHT(A2,8))) 이후 표시 서식을 yyyy-mm-dd hh:mm:ss로 지정한다.
/* 조건부 서식 수식 예 */ =LEFT($E2,1)="-" 전환은 파일 단위 설정이다. 혼용하면 외부 참조가 어긋나고 공유 시 혼란이 발생한다. 안전 운영 원칙은 다음과 같다.
| 점검 항목 | 전환 전 | 전환 후 | 합격 기준 |
|---|---|---|---|
| 기준 샘플 10건 날짜 일치 | 값 기록 | 값 기록 | 보정 후 ±0일 |
| 합계 시간 값 | 값 기록 | 값 기록 | 동일 |
| 피벗테이블 필터 | 동작 확인 | 동작 확인 | 필터 정상 |
주기적 수집 데이터는 Power Query로 정규화하면 재현성과 속도가 향상된다. 다음은 표준 규칙이다.
// M 언어 예시 스니펫 = Table.TransformColumns( #"Trimmed", { {"시간", each Time.From(_), type time} } ) | 서식 | 용도 | 예시 표시 |
|---|---|---|
| [h]:mm | 24시간 초과 누적 | 41:30 |
| [h]:mm:ss | 초 포함 누적 | 125:07:12 |
| hh:mm | 시계 시각 | 08:05 |
| yyyy-mm-dd hh:mm:ss | 타임스탬프 | 2025-10-25 14:33:21 |
| m"분 "s"초" | 러닝타임 가독화 | 05분 32초 |
/* 숫자 여부 검사 */ =IF(ISNUMBER(A2), A2, "") 아래 예제는 야간 교대 포함 근무시간, 야간수당시간, 지각·조퇴를 동시에 계산한다.
/* 가정: A열=날짜, B열=시작, C열=종료, D열=휴게(분), E열=기준시작, F열=기준종료 */
근무시간(H) = MOD(C2 - B2, 1) - D2/1440
야간시간(I) = LET(
s,B2, e,IF(C20, d, 0))
조퇴(K) = LET(d, F2 - C2, IF(d>0, d, 0))
/* 표시 서식 */
H:I → [h]:mm
J:K → 텍스트 표시: =IF(cell=0,"",TEXT(cell,"[h]:mm"))
[h]:mm 서식은 총시간이 24를 넘어도 누적값을 그대로 표시하기 때문이다. 일반 hh:mm 서식은 24로 나누어 나머지만 보여준다.
음수 시간 표시가 가능해지지만 모든 날짜 기준점이 이동한다. 기존 일정·외부참조가 있으면 불일치가 생긴다. 별도 파일로 운영하는 것이 안전하다.
합계를 숫자로 유지하려면 MOD 기반 보정값을 합산하고, 보고용으로는 TEXT로 부호를 붙여 표시한다. 즉 계산 열과 표시 열을 분리한다.
시간이 텍스트일 가능성이 높다. TIMEVALUE, VALUE, SUBSTITUTE, TRIM으로 정규화하고 IFERROR로 감싼다. 빈 셀은 ""로 처리하여 범위 합산에서 제외한다.
초는 [h]:mm:ss, 밀리초는 사용자 지정 서식 [h]:mm:ss.000을 사용한다. 밀리초는 반올림 오차가 있을 수 있다.