티스토리 뷰
엑셀 날짜 함수 정리 · 자동 달력 만들기 – DATE · WEEKDAY 요일 · EOMONTH · DATEDIF · NETWORKDAYS, 날짜 시간 합치기
마구자바 2026. 10. 11. 01:20
엑셀에서 날짜는 겉보기와 달리 숫자다. 이 원리만 알면 날짜 더하기 · 빼기, 요일 표시, 말일 구하기, 근무일 계산, 그리고 연 · 월만 바꾸면 날짜가 저절로 바뀌는 자동 달력까지 함수 몇 개로 만들 수 있다.
이 글에서는 자주 쓰는 엑셀 날짜 함수(DATE · YEAR · MONTH · DAY · TODAY · WEEKDAY · EDATE · EOMONTH · DATEDIF · NETWORKDAYS · WORKDAY)를 정리하고, 요일 표시, 날짜와 시간 합치기, 텍스트 날짜 변환, 그리고 엑셀 달력 만들기를 콘크리트 타설 · 양생 일정 예제로 설명한다.
| 하고 싶은 일 | 수식 (A1 = 2026-03-02) | 결과 |
| 오늘 날짜 | =TODAY() |
오늘 (자동 갱신) |
| 연 · 월 · 일로 날짜 만들기 | =DATE(2026, 3, 2) |
2026-03-02 |
| 요일 (한글) | =TEXT(A1, "aaa") |
월 |
| 요일 번호 | =WEEKDAY(A1) |
2 (일=1 … 토=7) |
| 28일 뒤 (재령 28일) | =A1+28 |
2026-03-30 |
| 1개월 뒤 | =EDATE(A1, 1) |
2026-04-02 |
| 그달 말일 | =EOMONTH(A1, 0) |
2026-03-31 |
| 두 날짜 사이 개월 수 | =DATEDIF(A1, B1, "m") |
B1까지 꽉 찬 개월 |
| 주말 · 공휴일 뺀 근무일 수 | =NETWORKDAYS(A1, B1, 공휴일) |
근무일 수 |
| 날짜 + 시간 합치기 | =A1+B1 |
2026-03-02 09:00 |
엑셀 날짜의 정체 – 일련번호
엑셀은 1900-01-01을 1로 놓고 하루에 1씩 더한 숫자로 날짜를 저장한다. 2026-10-11은 46306이다. 시간은 하루를 1로 본 소수여서 12:00은 0.5, 6:00은 0.25다. 그래서 날짜끼리 빼면 일수가 나오고, 날짜에 숫자를 더하면 그만큼 뒤의 날짜가 된다.
- 날짜 셀의 서식을 "일반"으로 바꾸면 일련번호가 보인다. 반대로 46306을 입력하고 날짜 서식을 주면 2026-10-11이 된다.
- 날짜를 넣었는데 숫자로 바뀌거나, 1-2처럼 입력했는데 날짜로 바뀌는 것(날짜 자동 변환)은 모두 이 일련번호와 서식 때문이다. 날짜로 바뀌지 않게 하려면 앞에 작은따옴표('1-2)를 붙이거나 셀 서식을 텍스트로 둔다.
날짜 만들기 · 나누기 – DATE · YEAR · MONTH · DAY · TODAY
| 함수 | 하는 일 | 예 (A1 = 2026-03-02) |
=DATE(연, 월, 일) |
숫자 3개로 날짜를 만듦 (월 · 일이 넘치면 자동으로 넘어감) | =DATE(2026, 13, 1) → 2027-01-01 |
=YEAR(A1) / MONTH / DAY |
날짜에서 연 · 월 · 일 꺼내기 | 2026 / 3 / 2 |
=TODAY() |
오늘 날짜 (파일을 열 때마다 갱신) | Ctrl + ; 는 고정된 오늘 날짜 입력 |
=NOW() |
지금 날짜와 시간 | Ctrl + Shift + ; 는 고정된 현재 시간 |
=DATE(YEAR(A1), MONTH(A1)+1, 1) |
다음 달 1일 | 2026-04-01 |
- DATE는 0일 · 13월처럼 범위를 넘는 값도 받아 준다. =DATE(2026, 3, 0)은 2월 말일(2026-02-28)이 된다.
- TODAY · NOW는 파일을 열거나 다시 계산할 때마다 바뀐다. 작성일처럼 고정해야 하는 날짜는 단축키로 입력한다.
엑셀 요일 표시 – WEEKDAY · TEXT
요일은 WEEKDAY로 번호를 얻거나, TEXT로 바로 글자를 얻는다. 셀 값은 날짜 그대로 두고 보이는 모양만 바꾸려면 셀 서식을 쓴다.
| 방법 | 수식 · 서식 | 결과 (2026-03-02) |
| 요일 번호 (일요일 = 1) | =WEEKDAY(A1) |
2 |
| 요일 번호 (월요일 = 1) | =WEEKDAY(A1, 2) |
1 |
| 한 글자 요일 | =TEXT(A1, "aaa") |
월 |
| 전체 요일 | =TEXT(A1, "aaaa") |
월요일 |
| 영문 요일 | =TEXT(A1, "ddd") / "dddd" |
Mon / Monday |
| 날짜 옆에 요일 (서식) | 사용자 지정 서식 yyyy-mm-dd (aaa) |
2026-03-02 (월) |
| 원하는 글자로 | =CHOOSE(WEEKDAY(A1), "일","월","화","수","목","금","토") |
월 |
- WEEKDAY의 두 번째 인수 2(월=1 … 일=7)를 쓰면 =WEEKDAY(A1, 2)>5 로 주말 판별이 쉬워진다.
- 주말에 색을 넣으려면 조건부 서식 → 수식 =WEEKDAY($A1, 2)>5 를 쓴다.
엑셀 날짜 시간 합치기
날짜와 시간이 다른 셀에 있으면 그냥 더하면 된다. 날짜는 정수, 시간은 소수이기 때문이다. 결과 셀에는 yyyy-mm-dd hh:mm 서식을 준다.
=A2+B2 ' 2026-03-02 + 09:00 → 2026-03-02 09:00
=INT(A2)+MOD(B2,1) ' 날짜 셀에 시간이, 시간 셀에 날짜가 섞여 있어도 안전
=DATEVALUE(A2)+TIMEVALUE(B2) ' 둘 다 텍스트("2026-03-02", "09:00")일 때
=TEXT(A2,"yyyy-mm-dd")&" "&TEXT(B2,"hh:mm") ' 계산이 아니라 글자로 이어 붙이기
- 합쳤더니 날짜가 하루 넘어가는 경우가 있다. 날짜 셀에 12:00 같은 시간이 숨어 있으면(2026-03-02 12:00) 여기에 시간 12:00을 더해 24시간이 되기 때문이다. INT(날짜)로 시간을 떼고 더한다.
- 반대로 날짜 · 시간이 함께 든 셀을 나누려면 날짜는 =INT(A2), 시간은 =MOD(A2, 1) 로 꺼낸다.
엑셀 날짜 계산 – 더하기 · 빼기 · 개월 · 말일
| 계산 | 수식 | 결과 (A1 = 2026-03-02, B1 = 2026-10-11) |
| n일 뒤 · 전 | =A1+28 / =A1-7 |
2026-03-30 / 2026-02-23 |
| 두 날짜 사이 일수 | =B1-A1 |
223 |
| 당일 포함 일수 | =B1-A1+1 |
224 |
| n개월 뒤 (같은 날) | =EDATE(A1, 6) |
2026-09-02 |
| 그달 말일 | =EOMONTH(A1, 0) |
2026-03-31 |
| 다음 달 말일 | =EOMONTH(A1, 1) |
2026-04-30 |
| 그달 1일 | =EOMONTH(A1, -1)+1 |
2026-03-01 |
| 그달 일수 | =DAY(EOMONTH(A1, 0)) |
31 |
- EDATE는 말일을 알아서 맞춘다. =EDATE("2026-01-31", 1)은 2월 31일이 없으므로 2026-02-28이 된다.
- 콘크리트 압축강도는 재령 28일 기준이므로, 타설일 + 28이 공시체 시험일이다 → 크리프 · 탄성계수 같은 재령 관련 계산은 콘크리트 크리프 계수 산정에도 나온다.
DATEDIF – 년 · 개월 · 일 차이 (숨은 함수)
DATEDIF는 함수 목록과 자동완성에 나오지 않지만 모든 버전에서 동작한다. 시작일이 종료일보다 늦으면 #NUM!이 난다.
| 단위 | 뜻 | =DATEDIF("2026-03-02", "2026-10-11", 단위) |
"y" |
꽉 찬 년 수 | 0 |
"m" |
꽉 찬 개월 수 | 7 |
"d" |
일 수 (=B1-A1과 같음) | 223 |
"ym" |
년을 뺀 나머지 개월 | 7 |
"md" |
개월을 뺀 나머지 일 | 9 |
=DATEDIF(A1,B1,"y")&"년 "&DATEDIF(A1,B1,"ym")&"개월 "&DATEDIF(A1,B1,"md")&"일" ' 0년 7개월 9일 (근속 · 공사 기간 표시)
주말 · 공휴일 뺀 근무일 – NETWORKDAYS · WORKDAY
공정표에서는 달력 날짜보다 작업일이 중요하다. NETWORKDAYS는 두 날짜 사이의 근무일 수를, WORKDAY는 근무일로 n일 뒤의 날짜를 구한다. 공휴일은 별도 범위에 적어 세 번째 인수로 넣는다.
=NETWORKDAYS("2026-04-01", "2026-04-30") ' 22 (4월 평일 수)
=NETWORKDAYS(A1, B1, 공휴일!$A$2:$A$20) ' 공휴일 목록까지 제외
=WORKDAY(A1, 20, 공휴일!$A$2:$A$20) ' 작업일 20일 뒤 날짜
=NETWORKDAYS.INTL(A1, B1, 11, 공휴일!$A$2:$A$20) ' 일요일만 휴무 (토요일 작업)
=WORKDAY.INTL(A1, 20, "0000011", 공휴일!$A$2:$A$20) ' 토 · 일 휴무를 문자열로 지정
- NETWORKDAYS는 시작일과 종료일을 둘 다 포함해서 센다.
- 설 · 추석 · 부처님오신날 · 대체공휴일은 해마다 날짜가 다르다. 공휴일 시트에 그해 날짜를 적어 두고 범위로 참조한다.
- .INTL의 주말 번호: 1 = 토 · 일, 11 = 일요일만, 17 = 토요일만. 문자열 "0000011"은 월~일 순서로 1이 휴무다.
| 엑셀 수식 | 결과 |
| - | - |
| - | - |
| - | - |
| - | - |
| - | - |
| - | - |
| - | - |
| - | - |
엑셀 자동 달력 만들기
연 · 월만 바꾸면 날짜가 저절로 바뀌는 만년 달력은 핵심 수식 하나면 된다. 달력 첫 칸(일요일)의 날짜를 구한 다음, 나머지 41칸은 1씩 더하기만 한다.
| 순서 | 셀 · 수식 | 설명 |
| ① | B1 = 2026, D1 = 10 |
연 · 월 입력 칸 |
| ② | A3 ~ G3 = 일 ~ 토 |
요일 머리글 |
| ③ | A4: =DATE(B1, D1, 1) - WEEKDAY(DATE(B1, D1, 1)) + 1 |
첫 칸 = 1일이 속한 주의 일요일 |
| ④ | B4: =A4+1 → G4까지 오른쪽으로 채우기 |
같은 주는 +1 |
| ⑤ | A5: =A4+7 → 오른쪽 · 아래로 채워 6줄 (A4:G9) |
다음 주는 +7 |
| ⑥ | A4:G9 사용자 지정 서식 d |
날짜 대신 "일"만 표시 |
| ⑦ | 조건부 서식 =MONTH(A4)<>$D$1 → 회색 글자 |
지난달 · 다음 달 날짜 흐리게 |
| ⑧ | 조건부 서식 =A4=TODAY() → 배경색 |
오늘 날짜 강조 |
- 달력은 6줄(42칸)로 만든다. 1일이 토요일이고 31일까지 있는 달은 6번째 주까지 내려가기 때문이다.
- 이 방식은 지난달 · 다음 달 날짜도 실제 날짜이므로, 일정표로 쓸 때 VLOOKUP · COUNTIF로 그날의 일정을 끌어올 수 있다 → VLOOKUP 함수 사용법
- 공휴일 시트를 만들어 두고 조건부 서식 =COUNTIF(공휴일!$A:$A, A4)>0 으로 빨간색을 주면 휴일 달력이 된다.
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
| - | - | - | - | - | - | - |
| - | - | - | - | - | - | - |
| - | - | - | - | - | - | - |
| - | - | - | - | - | - | - |
| - | - | - | - | - | - | - |
| - | - | - | - | - | - | - |
날짜 형식 변환 · 오류 해결
| 증상 | 원인 | 해결 |
| 20261011 같은 숫자를 날짜로 | 8자리 숫자는 날짜가 아님 | =DATE(LEFT(A1,4), MID(A1,5,2), RIGHT(A1,2)) |
| "2026.10.11" 글자가 계산 안 됨 | 점(.) 구분은 텍스트로 인식 | =DATEVALUE(SUBSTITUTE(A1, ".", "-")) 또는 텍스트 나누기 |
| 날짜를 글자로 (이어 붙이기용) | 날짜는 숫자라 46306으로 붙음 | =TEXT(A1, "yyyy-mm-dd") |
| ##### 표시 | 열 너비 부족 또는 음수 날짜 | 열 너비 넓히기, 빼기 순서 확인 |
| DATEDIF #NUM! | 시작일 > 종료일 | 두 인수 순서 바꾸기 |
| 날짜 자동 변환 끄기 | 1-2, 3/4가 날짜로 바뀜 | 작은따옴표 '1-2 또는 셀 서식 텍스트 |
VBA 날짜 함수
Sub 날짜함수()
Dim d As Date
d = DateSerial(2026, 3, 2) ' =DATE
Debug.Print d + 28 ' 2026-03-30 (재령 28일)
Debug.Print Weekday(d), Format(d, "aaa") ' 2 월
Debug.Print DateAdd("m", 1, d) ' 2026-04-02 (=EDATE)
Debug.Print DateSerial(2026, 4, 0) ' 2026-03-31 (말일)
Debug.Print DateDiff("d", d, #10/11/2026#) ' 223
Debug.Print Application.WorksheetFunction.NetworkDays(d, #3/31/2026#)
End Sub
- VBA의 Weekday도 일요일이 1이다. Format(d, "aaa")는 한글 요일을 돌려준다.
- DateSerial도 DATE처럼 0일 · 13월을 받아 준다.
자주 묻는 질문
| 질문 | 답 |
| 엑셀에서 요일 표시는? | =TEXT(A1, "aaa") 또는 셀 서식 yyyy-mm-dd (aaa). |
| 날짜와 시간을 합치려면? | =A1+B1 후 yyyy-mm-dd hh:mm 서식. 하루 넘어가면 =INT(A1)+MOD(B1,1). |
| 두 날짜 사이 일수는? | =B1-A1, 당일 포함이면 +1. 개월 · 년은 DATEDIF. |
| DATEDIF가 목록에 없어요 | 숨은 함수라 직접 입력하면 동작한다. |
| 주말 빼고 일수 계산은? | =NETWORKDAYS(시작, 끝, 공휴일). 날짜를 구하려면 WORKDAY. |
| 그달 말일은? | =EOMONTH(A1, 0). |
| 엑셀 달력 만들기 핵심 수식은? | 첫 칸 =DATE(연,월,1)-WEEKDAY(DATE(연,월,1))+1, 나머지는 +1 · +7. |
관련 글
→ 엑셀 반올림 · 올림 · 내림 함수 – ROUND · INT · TRUNC
