엑셀 날짜 계산 총정리 - 영업일, 근속연수, 월말 구하기

근속연수를 구하려고 날짜를 빼서 365로 나눴는데 값이 미묘하게 안 맞습니다. 마감일을 5일 뒤로 잡았더니 주말이 끼어 있습니다. 월말을 계산하려니 달마다 날짜가 다릅니다.

엑셀에는 이런 계산을 위한 전용 함수가 이미 있습니다. 직접 계산하면 윤년과 월말, 주말 때문에 반드시 어긋납니다. 상황별로 어떤 함수를 쓰는지 정리했습니다.

먼저 알아야 할 것 — 날짜는 숫자다

엑셀은 날짜를 1900년 1월 1일부터 몇 번째 날인지를 세는 숫자로 저장합니다. 화면에 2026-03-15로 보이는 것은 표시 형식일 뿐이고, 실제 값은 46096 같은 숫자입니다.

그래서 두 날짜의 차이는 그냥 빼면 됩니다. 함수가 필요 없습니다.

=A2-B2  → 두 날짜 사이의 일수

결과 셀에 날짜 서식이 남아 있으면 숫자가 아니라 이상한 날짜로 보입니다. 셀 서식을 일반으로 바꾸세요.


근속연수·나이 — DATEDIF

=DATEDIF(입사일, TODAY(), "Y")  → 만 몇 년
=DATEDIF(입사일, TODAY(), "M")  → 총 몇 개월
=DATEDIF(입사일, TODAY(), "YM") → 연수를 뺀 나머지 개월

"3년 7개월" 형태로 표시하려면 두 개를 이어붙입니다.

=DATEDIF(A2,TODAY(),"Y")&"년 "&DATEDIF(A2,TODAY(),"YM")&"개월"

DATEDIF는 숨은 함수입니다. 셀에 =DAT까지 입력해도 자동완성 목록에 나타나지 않고, 함수 마법사에도 없습니다. 하지만 전체를 직접 입력하면 정상 작동합니다. 예전 다른 프로그램과의 호환을 위해 남아 있는 함수라 그렇습니다.

인수 순서를 주의하세요. 시작일이 먼저, 종료일이 나중입니다. 반대로 넣으면 #NUM!이 나옵니다.

월말·결제일 — EOMONTH

=EOMONTH(A2, 0)  → 이번 달 말일
=EOMONTH(A2, 1)  → 다음 달 말일
=EOMONTH(A2, -1)+1 → 이번 달 1일

두 번째 인수가 몇 달 뒤인지를 뜻합니다. 0이면 이번 달, 1이면 다음 달, 음수면 이전 달입니다.

세 번째 줄이 유용합니다. 지난달 말일에 하루를 더하면 이번 달 1일이 됩니다. 월초를 구하는 별도 함수가 없어서 이 방식을 씁니다.

"익월 말일 결제" 조건이라면 =EOMONTH(거래일, 1) 하나로 끝납니다. 2월이든 31일까지 있는 달이든 알아서 처리됩니다.

n개월 후 같은 날 — EDATE

=EDATE(A2, 3) → 3개월 후 같은 날짜

계약 만료일이나 갱신일 계산에 씁니다. 1월 31일의 3개월 후처럼 해당 날짜가 없는 경우에는 그 달의 말일을 반환합니다. 4월 31일이 없으니 4월 30일이 나오는 식입니다.

영업일 계산 — NETWORKDAYS, WORKDAY

영업일 수 세기

=NETWORKDAYS(시작일, 종료일, 공휴일범위)

토요일과 일요일을 자동으로 뺍니다. 시작일과 종료일을 모두 포함해서 세므로, 같은 날을 넣으면 1이 나옵니다.

n영업일 뒤 날짜 구하기

=WORKDAY(기준일, 5, 공휴일범위)

"접수일로부터 5영업일 이내 처리" 같은 기한을 계산할 때 씁니다. 이쪽은 기준일을 세지 않고 그다음 영업일부터 셉니다.

공휴일 목록은 직접 만들어야 합니다

가장 많이 놓치는 부분입니다. 엑셀은 한국 공휴일을 알지 못합니다. 별도 시트에 날짜를 세로로 나열하고 그 범위를 세 번째 인수에 넣어야 합니다.

범위는 $H$2:$H$30처럼 절대참조로 고정하세요. 안 그러면 아래로 채울 때 범위가 밀립니다.

주 6일 근무처럼 주말 규칙이 다르다면 NETWORKDAYS.INTLWORKDAY.INTL을 씁니다. 두 번째 인수로 어떤 요일을 쉬는지 지정할 수 있습니다.

요일 판별 — WEEKDAY, TEXT

=WEEKDAY(A2, 2) → 월=1, 화=2 … 일=7
=TEXT(A2, "aaa") → 월, 화, 수 (한 글자)
=TEXT(A2, "aaaa") → 월요일, 화요일

두 번째 인수 2를 꼭 넣으세요. 생략하면 일요일이 1이 되어 계산이 헷갈립니다. 2를 넣으면 월요일부터 시작하는 우리 감각과 맞습니다.

주말에 색을 칠하려면 조건부 서식에 이렇게 넣습니다.

=WEEKDAY($A2, 2) > 5

TODAY와 NOW의 차이

  • =TODAY() — 오늘 날짜만 (시각 없음)
  • =NOW() — 날짜 + 현재 시각
  • Ctrl + ; — 오늘 날짜를 값으로 고정 입력

TODAY와 NOW는 파일을 열 때마다 다시 계산됩니다. 기록으로 남겨야 하는 입력일자에는 쓰면 안 됩니다. 어제 입력한 건이 오늘 날짜로 바뀌어 있게 됩니다.

기록용이라면 Ctrl + ;으로 그 시점의 날짜를 값으로 박아 넣으세요.

자주 막히는 지점 세 가지

① 날짜가 텍스트로 저장돼서 계산이 안 됨

다른 시스템에서 내려받은 파일에서 흔합니다. =ISNUMBER(A2)FALSE면 날짜가 아니라 글자입니다. 값이 셀 왼쪽에 붙어 있는 것도 신호입니다.

가장 빠른 해결은 텍스트 나누기입니다. 열 하나 선택 → 데이터텍스트 나누기 → 아무것도 바꾸지 말고 마침. 엑셀이 데이터를 다시 해석하면서 날짜로 인식합니다.

20260315처럼 구분자 없이 들어온 경우는 이렇게 처리합니다.

=DATE(LEFT(A2,4), MID(A2,5,2), RIGHT(A2,2))

② 날짜에 시각이 숨어 있음

2026-03-15 09:31인데 표시 형식 때문에 날짜만 보이는 경우입니다. 이러면 같은 날짜인데도 비교가 안 맞고, 일수 계산에 소수점이 붙습니다.

=INT(A2) → 시각을 버리고 날짜만

③ DATEDIF의 "MD"는 쓰지 마세요

"년월을 제외한 일수"를 구하는 "MD" 옵션은 특정 조건에서 음수나 잘못된 값을 반환하는 것으로 알려져 있습니다. 마이크로소프트 문서에서도 권장되지 않습니다.

"3년 7개월 12일" 형태가 꼭 필요하다면 일수는 별도로 계산하는 편이 안전합니다. 대부분의 실무에서는 년과 개월까지면 충분합니다.

자주 묻는 질문

Q. 근속연수를 365로 나눠서 구하면 안 되나요?

윤년 때문에 4년에 하루씩 어긋납니다. 근속 10년이면 이틀 이상 차이가 나고, 이게 만 나이나 연차 계산에 영향을 줄 수 있습니다. DATEDIF를 쓰세요.

Q. 만 나이를 계산하려면?

=DATEDIF(생년월일, TODAY(), "Y") 입니다. 생일이 지났는지까지 자동으로 반영됩니다.

Q. 날짜 범위가 겹치는지 확인하려면?

두 기간이 겹치는 조건은 =AND(시작1<=종료2, 시작2<=종료1) 입니다. 일정 중복이나 예약 충돌 검사에 씁니다.

Q. 공휴일 목록을 자동으로 가져올 수 없나요?

엑셀에서 직접 가져오는 기본 기능은 없습니다. 매년 초에 한 번 만들어두고 재사용하는 편이 현실적입니다. 구글 시트라면 IMPORTHTML로 웹의 표를 가져오는 방법이 있지만, 출처가 바뀌면 깨지므로 검증이 필요합니다.

Q. 구글 시트에서도 되나요?

DATEDIF, EOMONTH, EDATE, NETWORKDAYS, WORKDAY, WEEKDAY 모두 동일하게 작동합니다. 요일 표시는 TEXT(A2,"ddd") 형식을 씁니다.

정리

  • 날짜 차이는 함수 없이 그냥 빼기
  • 근속·나이는 DATEDIF (자동완성에 안 뜨지만 작동)
  • 월말은 EOMONTH, 월초는 EOMONTH(A2,-1)+1
  • 영업일은 NETWORKDAYS공휴일 목록은 직접
  • 기록용 날짜는 TODAY()가 아니라 Ctrl + ;

관련 글

  • 엑셀 실무 함수 12개 정리
  • 엑셀 근무시간 계산, 합계가 이상하게 나오는 진짜 이유
  • 조건부 서식으로 마감일·재고 알림 만들기
  • 엑셀 숫자가 텍스트로 저장됐을 때, 원인과 해결법 4가지

댓글