오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
실무자 기초 강의

엑셀 달력 자동화, 공휴일+일정까지 완벽 해결! | CALENDAR 함수 만들기

오빠두엑셀 by 오빠두엑셀
  • 학습시간 17분
  • 난이도 초급
  • 작성일 2024.02.14

엑셀 기본 함수만으로 달력 만들기 자동화하는 방법! CALENDAR 함수 사용법부터, 함수 공식을 만드는 과정을 15분 총정리 강의로 확인하세요!🔥

이 강의에서는 엑셀의 SEQUENCE, WEEKDAY, VLOOKUP 함수를 조합해 년도와 월만 바꾸면 자동으로 갱신되는 달력을 만드는 방법을 다룹니다. 공휴일과 개인 일정을 한 화면에 표시하고, 조건부서식으로 이전·이후 월을 회색으로 흐리는 단계까지 정리해, 매년 새로 그릴 필요 없는 자동화 달력을 완성합니다.

엑셀 달력 자동화, 공휴일+일정까지 완벽 해결! | CALENDAR 함수 만들기
DOWNLOADS

실습자료를 준비했어요

수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇

강의에 사용된 공식 빠르게 살펴보기

① M365 버전 : CALENDAR 함수 완성 공식

M365 버전을 사용한다면 아래 공식을 '이름 관리자'에 그대로 붙여넣은 뒤, 엑셀에서 CALENDAR 함수를 바로 호출할 수 있습니다.

=LAMBDA(년도,월,[개월수],[공휴일표],[일정표],[날짜서식],[요일표시],[전후월표시],[월요일시작],LET(oYear,년도,oMonth,월,sMonth,IF(개월수=0,1,개월수),fromMon,IF(월요일시작=0,0,1),dataA,IF(공휴일표=0,{"",""},공휴일표),dataB,IF(일정표=0,{"","",""},일정표),displayHeader,IF(요일표시=0,0,1),dFormat,IF(날짜서식=0,"m/d",날짜서식),displayPrev,IF(전후월표시=0,0,1),oDate,DATE(oYear,oMonth,1),sDate,oDate-WEEKDAY(oDate,1+fromMon)+1,DateList,SEQUENCE(EOMONTH(oDate,sMonth-1)-sDate+8-WEEKDAY(EOMONTH(oDate,sMonth-1),1+fromMon),,sDate),tDateList,IF(전후월표시=1,DateList,IF((DateList<oDate)+(DateList>EOMONTH(oDate,sMonth-1)),"",DateList)),tDate,WRAPROWS(tDateList,7),Ddata,tDate,Udata,TOCOL(Ddata),dataAC1,INDEX(dataA,,1),dataAC2,INDEX(dataA,,2),vA,UNIQUE(TRANSPOSE(IF(dataAC1=TRANSPOSE(Udata),dataAC2,"")),1),seqrvA,SEQUENCE(ROWS(vA)),sepA,CHAR(10),xA,MMULT((LEN(vA)+LEN(sepA))*(vA<>""),SIGN(SEQUENCE(COLUMNS(vA))))-LEN(sepA),yA,MMULT(--(TRANSPOSE(seqrvA)<seqrvA),xA+LEN(sepA)-1)+seqrvA,dataBC1,INDEX(dataB,,1),dataBC2,INDEX(dataB,,3)&TEXT(INDEX(dataB,,2)," (AM/PM HH:MM)"),vB,UNIQUE(TRANSPOSE(IF(dataBC1=TRANSPOSE(Udata),dataBC2,"")),1),seqrvB,SEQUENCE(ROWS(vB)),sepB,CHAR(10),xB,MMULT((LEN(vB)+LEN(sepB))*(vB<>""),SIGN(SEQUENCE(COLUMNS(vB))))-LEN(sepB),yB,MMULT(--(TRANSPOSE(seqrvB)<seqrvB),xB+LEN(sepB)-1)+seqrvB,DROP(VSTACK(IF(fromMon=0,{"일","월","화","수","목","금","토"},{"월","화","수","목","금","토","일"}),IFERROR(WRAPROWS("["&MID(TEXTJOIN(sepA,,vA),yA,xA)&"] ",7),"")&TEXT(Ddata,dFormat)&CHAR(10)&IFERROR(WRAPROWS(MID(TEXTJOIN(sepB,,vB),yB,xB),7),"")),(displayHeader=0)*1)))
오빠두Tip : 🚀 최신 버전의 CALENDAR 함수는 아래 링크에서 확인할 수 있습니다.

휴일과 일정을 동시에 표시하는 함수 공식 (영상 10분 45초)

아래 공식을 예제파일 [달력 만들기] 시트의 B7셀에 붙여넣으면 공휴일과 일정이 함께 표시되는 달력이 완성됩니다.

=IFERROR("["&VLOOKUP(SEQUENCE(6,7,F3),휴일목록,2,0)&"] ","")&TEXT(SEQUENCE(6,7,F3),"m/d")&CHAR(10)&IFERROR(VLOOKUP(SEQUENCE(6,7,F3),일정목록,2,0),"")

M365 버전 : CALENDAR 함수 사용법

  1. CALENDAR 함수 등록하기 : 예제파일의 [달력] 시트로 이동한 뒤, [수식] - [이름 관리자] - [새로 만들기] 버튼을 클릭합니다.
    엑셀-이름관리자-실행
  2. '새 이름' 대화상자가 나타나면 아래와 같이 이름을 정의한 후 [확인] 버튼을 누르면, 현재 작업 중인 통합문서에 CALENDAR 함수가 등록됩니다.
    이름 : CALENDAR
    설명 : 선택한 년도, 월, 개월수에 해당하는 달력을 생성합니다.
    참조 대상 : 공식 참조

    엑셀-달력-calendar-함수

  3. CALENDAR 함수 사용하기 : 이름 관리자를 닫은 뒤, [달력] 시트의 B7셀을 선택하고 "=CAL" 까지만 입력하면 방금 등록한 CALENDAR 함수가 자동완성 목록에 표시됩니다.

    엑셀-calendar-함수

    =CALENDAR(년도,월,[개월수],[공휴일표],[일정표],[날짜서식],[요일표시],[전후월표시],[월요일시작])

    · 년도, 월 : 달력의 시작 년도와 월입니다.
    · 개월수 : 달력에 표시할 개월 수입니다.
    · 공휴일표 : 달력에 표시할 공휴일 목록으로, '날짜 | 공휴일명' 형식의 2열 표입니다.
    · 일정표 : 달력에 표시할 일정으로, '날짜 | 시간 | 설명' 형식의 3열 표입니다.
    · 날짜서식 : 달력에 적용할 날짜 서식이며, 기본값은 "m/d" 입니다.
    · 요일표시 : 1을 입력하면 날짜에 요일이 함께 표시됩니다. 기본값은 표시 안 함(=0)입니다.
    · 전후월표시 : 1을 입력하면 이전·이후 월의 날짜까지 표시됩니다. 기본값은 표시 안 함(=0)입니다.
    · 월요일시작 : 1을 입력하면 달력이 월요일부터 시작합니다. 기본값은 일요일 시작(=0)입니다.

    오빠두Tip : 셀 서식에 대한 자세한 설명은 「진짜쓰는 실무엑셀」 5분 기초 강의에서 정리했습니다.👇
  4. B7셀에 아래 수식을 입력하면 선택한 년도, 월, 개월수, 공휴일, 일정이 모두 반영된 달력이 완성됩니다.
    =CALENDAR(B3,C3,D3,공휴일표[#모두],일정표[#모두],,,,E3)

    엑셀-자동화-달력-완성

엑셀 기본 달력 만들기 (SEQUENCE + WEEKDAY 함수)

  1. 달력 시작요일 만들기 : 예제파일에서 [달력만들기] 시트로 이동합니다. 먼저 선택한 년도와 월의 1일을 구해 보겠습니다. D3셀에 아래 DATE 함수를 입력하면 선택한 년도와 월의 1일이 반환됩니다.
    =DATE(B3,C3,1)

    엑셀-월-1일

  2. 달력은 시작 월의 1일이 포함된 주의 일요일(또는 월요일)부터 시작합니다. 따라서 1일이 포함된 주의 시작일을 별도로 계산해야 합니다. E3셀을 선택한 뒤 아래와 같이 WEEKDAY 함수를 입력하면 1일의 요일 번호가 반환됩니다.
    =WEEKDAY(D3)

    엑셀-요일번호-계산

    [ISPAN]WEEKDAY 함수의 기본값은 1(일요일) ~ 7(토요일)입니다. 월요일 시작 달력을 만들 때는 WEEKDAY 함수의 두 번째 인수를 2로 지정합니다.[/ISPAN]

  3. 요일 번호를 구했으니 '달력 시작일'은 "=시작일(1일) - 요일번호 + 1" 공식으로 계산할 수 있습니다. F3셀에 아래 수식을 입력하면 선택한 년도/월의 달력 시작일이 계산됩니다.
    =D3-E3+1

    엑셀-달력-시작요일-계산

  4. 기본 달력 완성하기 : 마지막으로 달력의 시작셀인 B7셀에 SEQUENCE 함수를 입력하면, 시작 요일부터 가로(7) X 세로(6) 형태로 구성된 달력이 완성됩니다.
    =SEQUENCE(6,7,F3)
    '=SEQUENCE(행높이,[열너비],[시작값],[단계])

    엑셀-달력-만들기-완성

    오빠두Tip : 엑셀 2021 이후 버전에 추가된 '분산 범위'와 '동적 배열'은 「진짜쓰는 실무엑셀」 기초 강의에서 알기 쉽게 정리했습니다.👇

개인 일정과 공휴일을 출력하는 달력 만들기

  1. 이제 달력에 표시된 날짜를 일정표에서 VLOOKUP 함수로 검색하면 날짜와 일정을 함께 보여 주는 자동화 달력을 만들 수 있습니다. B7셀의 수식을 아래와 같이 변경합니다.
    =SEQUENCE(6,7,F3)&CHAR(10)&VLOOKUP(SEQUENCE(6,7,F3),일정목록,2,0)

    ' ① SEQUENCE(6,7,F3) : 날짜 배열입니다.
    ' ② CHAR(10) : 줄바꿈 문자입니다.
    ' ③ VLOOKUP(SEQUENCE(6,7,F3),일정목록,2,0) : 일정목록에서 일정을 검색해 반환된 값입니다.

  2. 위 수식을 입력하면 일정이 없는 날짜에는 #N/A 오류가 반환됩니다.

    엑셀-달력-na-오류

  3. 따라서 일정을 검색하는 VLOOKUP 함수를 IFERROR 함수로 감싸, 오류가 발생한 날짜에는 빈칸이 반환되도록 작성합니다.
    =SEQUENCE(6,7,F3)&CHAR(10)&IFERROR(VLOOKUP(SEQUENCE(6,7,F3),일정목록,2,0),"")

    ' IFERROR(VLOOKUP(SEQUENCE(6,7,F3),일정목록,2,0),"")
    : VLOOKUP 함수가 오류를 반환하면 오류 대신 빈칸을 반환합니다.

    엑셀-자동화-달력-공식

    오빠두Tip : VLOOKUP 함수와 IFERROR 함수의 오류 처리 방법은 아래 강의에서 자세히 정리했습니다.👇
  4. 마지막으로 TEXT 함수로 날짜의 표시 형식을 "월/일"로 변환하면, 날짜와 일정을 함께 보여 주는 자동화 달력이 완성됩니다.
    =TEXT(SEQUENCE(6,7,F3),"m/d")&CHAR(10)&IFERROR(VLOOKUP(SEQUENCE(6,7,F3),일정목록[#모두],2,0),"")

    ' TEXT(SEQUENCE(6,7,F3),"m/d") : 날짜를 "월/일" 서식으로 표시합니다.

    엑셀-달력-일정-표시

  5. 같은 원리로 아래 공식을 적용하면 휴일과 일정을 동시에 표시하는 자동화 달력을 완성할 수 있습니다. 완성 공식을 참고해 나만의 자동화 달력을 만들어 보세요.
    =IFERROR("["&VLOOKUP(SEQUENCE(6,7,F3),휴일목록,2,0)&"] ","")&TEXT(SEQUENCE(6,7,F3),"m/d")&CHAR(10)&IFERROR(VLOOKUP(SEQUENCE(6,7,F3),일정목록,2,0),"")

    엑셀-공휴일-포함-달력-만들기

이전/이후 월을 숨기고 공휴일을 강조하는 조건부서식 적용하기

  1. 날짜범위 만들기 : 조건부서식을 활용하면 공휴일이거나 선택한 월이 아닌 날짜에 자동으로 서식을 적용할 수 있습니다. 다만 앞 단계에서 만든 달력은 순수한 날짜 형식이 아니므로, 조건부서식을 직접 적용할 수 없습니다. 따라서 조건부서식이 참조할 수 있는 순수한 날짜 범위를 별도로 만들어야 합니다.

    엑셀-달력-문자

  2. 달력 우측의 빈 셀을 선택합니다. 이번 강의에서는 J7셀을 선택하겠습니다. 이후 아래 SEQUENCE 함수를 입력해 순수한 날짜 범위를 생성합니다.
    =SEQUENCE(6,7,F3)

    엑셀-달력-날짜-범위-만들기

    오빠두Tip : SEQUENCE 함수의 결과가 숫자로 표시된다면, 범위를 선택한 후 Ctrl + Shift + 3을 눌러 날짜 서식으로 변경합니다. 실무에 꼭 필요한 20개 단축키는 아래 기초 강의에서 정리했습니다.👇
  3. 조건부서식 적용하기 : 조건부서식을 적용할 달력 범위를 선택한 뒤, [홈] 탭 - [조건부 서식] - [새 규칙]으로 이동합니다. [새 서식 규칙] 대화상자가 나타나면 규칙 유형으로 마지막 항목인 '수식을 사용하여 서식을 지정할 셀 결정'을 선택한 후, 아래 수식을 입력합니다.
    =MONTH(J7)<>$C$3

    '위 공식은 선택한 월이 아닌 날짜를 판별합니다. 셀 참조방식으로 동작하는 수식의 원리는 영상 강의에서 자세히 설명합니다.

    엑셀-달력-전후월-서식

    오빠두Tip : 셀 참조방식을 활용해 원하는 행/열에 조건부서식을 정확하게 적용하는 방법은 아래 「진짜쓰는 실무엑셀」 기초 강의에서 자세히 정리했습니다.👇
  4. [서식] 버튼을 클릭한 후 [글꼴] 탭에서 글꼴 색상을 옅은 회색으로 지정하고 [확인] 버튼을 누르면 조건부서식이 적용됩니다.

    엑셀-전후월-회색-글씨

  5. 아래 그림과 같이 이전·이후 월의 날짜가 회색 글꼴로 표시됩니다.

    엑셀-달력-현재-월만-표시

  6. 같은 방법으로 조건부서식의 새 규칙에 아래 수식을 적용하면, [일정] 시트에 작성된 공휴일을 참조하여 공휴일에 빨간색 글씨를 적용할 수 있습니다.
    =COUNTIF(일정!$E$1:$E$13,J7)>0

    엑셀-공휴일-자동-달력-완성

댓글 42
5 (21개 평가)
glfksh
glfksh 2024.02.16 07:47
2021년 버전에서 완성 파일을 사용해 봤는데요. 동일한 날짜에 "일정 시트"에 입력하면 하"달력만들기" 시트에는 하나밖에 표시가 되지 않습니다. 특정 날짜에 일정을 기입하면 모두 표시는 할 수 없는건가요.?함수수식을 일부 수정해야 하는지...? 감사합니다.
오빠두엑셀
오빠두엑셀 작성자 2024.02.19 00:43
안녕하세요. 오빠두엑셀 전진권 강사입니다.
여러 개로 나누어서 입력한 일정을 모두 표시하려면, FILTER 함수 + MMULT(2차원 배열 계산) 함수 조합의 트릭을 사용해야 합니다. (공식이 많이 복잡합니다.)
FILTER 함수는 2차원 배열(x-y축)만 생성할 수 있고, 여러 일정을 필터링 할 경우 날짜(x축) + 여러일정(y축) + 달력(z축)으로 검색되어 올바른 결과를 반환하지 않게 됩니다.
FITLER + MMULT 함수 공식은 완성된 CALENDAR 함수에 적용되어 있으니 필요하실 경우 확인해보시길 바랍니다.
대안책은 2가지가 있습니다.
1. 일정 표에서 각 날짜별 여러 일정을 줄바꿈으로 나누어서 입력하는 방법
2. IF+TEXTJOIN 으로 날짜별 일정을 하나로 합친 보조 테이블을 만든 후, 보조 테이블에 VLOOKUP 함수로 검색하는 방법
(https://www.oppadu.com/%EC%97%91%EC%85%80-%ED%8A%B9%EC%A0%95-%EC%A1%B0%EA%B1%B4-%EB%A7%8C%EC%A1%B1%ED%95%98%EB%8A%94-%ED%85%8D%EC%8A%A4%ED%8A%B8-%ED%95%A9%EC%B9%98%EA%B8%B0/)
을 사용하면 보다 간단하게 여러 일정을 표시할 수 있습니다.
제시해드린 답변이 문제를 해결하시는데 도움이 되었길 바랍니다. 감사합니다.
김진영
김진영 2024.03.28 15:23
이 엑셀에서 오늘날짜 배경색을 표시할라면 방법이 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2024.03.31 02:40
안녕하세요.
오늘 날짜 배경색은 조건부서식을 다음과 같이 적용하면 됩니다.
=범위시작셀=TODAY()
감사합니다. :)
김진영
김진영 2024.04.02 08:25
감사합니다^^
absent****
absent**** 2024.04.01 13:39
2016년 버전에서는 어떻게 사용해야될까요?
오빠두엑셀
오빠두엑셀 작성자 2024.04.03 14:47
안녕하세요! 오빠두엑셀입니다.
아쉽게도 이번 강의에서 소개해드린 내용은 2016 버전에서는 사용이 불가합니다.
엑셀 2016 버전을 사용 중이실 경우, 이전 강의에서 소개해드린 달력 만들기 강의를 한번 참고해보시겠어요? :)
엑셀 달력, 공휴일 및 일정 관리 자동달력/만년달력 만들기 - 오빠두엑셀 (oppadu.com)
감사합니다.
직험생
직험생 2024.05.30 12:58
안녕하세요 쌤. 미국에서 재경팀에서 근무하고 있는데요 이번에도 저를 또 살려주셨습니다. 진짜 존재해 주셔서 감사합니다. 근데 날짜를 내용과 한줄 띄우려면 어떻게 해야 할까요. 저희 부사장님께 올라갈껀데 너무 날짜 식별이 안된다고 하셔서요.. 볼드처리나 밑줄이나 아무거나 좋으니 날짜를 눈에 확 띄게 하는 법을 알려주시면 너무나도 감사할꺼 같습니다.
오빠두엑셀
오빠두엑셀 작성자 2024.05.31 14:21
안녕하세요. 오빠두엑셀입니다.
엑셀 함수로 글꼴을 굵게하거나 밑줄을 추가하는 것은 불가합니다.
함수 인수 중, "날짜 서식"을 변경해보시길 바랍니다.
예를 들어, "■yyyy-mm-dd■" 와 같이 강조할 수 있습니다.
남겨드린 답변이 문제를 해결하시는데 도움이 되었길 바랍니다. 감사합니다.
직험생
직험생 2024.06.01 00:02
정말 막막했는데 큰 도움이 되었습니다. 감사합니다!
세뇨르
세뇨르 2024.06.13 17:38
안녕하세요. 해당일정 중 추가 일정들도 표시하기 위해서는 어떻게 해야 하나요?
vlookup함수로 만들어서 최상단 일정만 표시되는거 같은데.. 해결법 부탁드리겠습니다..
오빠두엑셀
오빠두엑셀 작성자 2024.06.16 17:22
안녕하세요. 오빠두엑셀입니다.
관련하여 이전에 답변을 드린적이 있습니다.
아래 댓글을 한번 확인해보시겠어요? :)
https://www.oppadu.com/%ec%97%91%ec%85%80-%eb%8b%ac%eb%a0%a5-%ec%9e%90%eb%8f%99%ed%99%94/#comment-23583
감사합니다.
강주희
강주희 2024.06.21 13:05
진짜,, 필요한 강의입니다. 저희 회사에 맞게 커스텀해서 사용하려고 하는데 몇가지 질문 드립니다!
  • 프로젝트성으로 시작일- 종료일 설정이 가능할까요?
  • ex) 2024. 6.23 - 6.27 한번에 컬러표시
  • 규칙적인 일정 표시도 가능할까요?
  • 요일이 아닌 라이브 날짜 기준으로 3일전, 2일전 기획완료 제작완료 이런식의 표시 되었으면 좋을것 같습니다!
용문
용문 2024.07.16 20:24
안녕하세요 이걸 엑셀이 아닌 구글 시트에도 적용이 가능한가요? 이름 관리자 창이 보이질 않아서요 ㅠㅠ
오빠두엑셀
오빠두엑셀 작성자 2024.07.17 06:12
안녕하세요. 오빠두엑셀입니다.
LAMBDA 함수는 엑셀 M365 에서만 제공되어 구글시트에서는 사용하실 수 없습니다. :)
감사합니다.
강민준🤗
강민준🤗 2024.08.09 07:24
좋은 강의 감사합니다🙇‍♂️
aud****
aud**** 2024.10.06 08:46
질문이 있어 보냅니다.
공휴일은 근무를 하지 않는 4조 2교대 근무를 보내주신 예제 파일에 추가하는 방법을 알고 싶습니다.
차양지
차양지 2024.10.21 15:09
2021 버전에서 사용할 수 있는 방법은 없을까요??
오빠두엑셀
오빠두엑셀 작성자 2024.10.21 18:47
안녕하세요.
LAMBDA 함수는 M365 버전에서만 제공되는 함수여서, 2021 버전에서는 사용이 제한됩니다. :)