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

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

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

# 함수및공식 # 엑셀기능

작성자 :
오빠두엑셀
최종 수정일 : 2024. 03. 24. 05:53
URL 복사
메모 남기기 : (42)

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

엑셀 달력 자동화 함수 목차 바로가기
영상 강의


예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

  • [실무기초] 엑셀 달력 자동화, CALENDAR 함수 만들기
    예제파일
  • [실무기초] 엑셀 달력 자동화, CALENDAR 함수 만들기
    완성파일

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

① 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-함수
    사용자 함수로 CALENDAR 함수를 등록합니다.
  3. CALENDAR 함수 사용하기 : 이름 관리자를 종료한 후, [달력] 시트 B7셀을 선택하고 "=CAL" 을 작성하면 등록된 CALENDAR 함수를 확인할 수 있습니다.
    엑셀-calendar-함수
    "=CAL" 을 입력하면 등록한 CALENDAR 함수가 목록에 표시됩니다.
    =CALENDAR(년도,월,[개월수],[공휴일표],[일정표],[날짜서식],[요일표시],[전후월표시],[월요일시작])

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

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

    엑셀-자동화-달력-완성
    이제 CALENDAR 함수로 자동화 달력을 편리하게 만들 수 있습니다.

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

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

    엑셀-월-1일
    선택한 년도와 월의 1일을 계산합니다.
  2. 달력은 시작 월의 1일이 있는 주의 일요일(또는 월요일)부터 시작합니다. 따라서, 매월 1일을 포함하는 주의 시작일을 계산하겠습니다. E3셀을 선택한 후, 아래와 같이 WEEKDAY 함수를 작성하면 1일의 요일번호가 계산됩니다.
    =WEEKDAY(D3)
    엑셀-요일번호-계산
    WEEKDAY 함수로 요일 번호를 계산합니다.

    [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(행높이,[열너비],[시작값],[단계])
    엑셀-달력-만들기-완성
    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-오류
    일정이 없는 날짜의 경우, VLOOKUP 함수의 결과로 #N/A 오류가 반환됩니다.
  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 함수가 오류를 반환할 경우, 오류 대신 빈칸을 반환합니다.

    엑셀-자동화-달력-공식
    IFERROR 함수로 #N/A 오류 대신 빈칸을 표시합니다.
    오빠두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") : 날짜를 "월/일" 서식으로 표시합니다.

    엑셀-달력-일정-표시
    TEXT 함수를 사용해 날짜를 "월/일" 형식으로 표시합니다.
  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)
    엑셀-달력-날짜-범위-만들기
    SEQUENCE 함수를 사용해 순수한 날짜 범위를 생성합니다.
    오빠두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 버전에서는 사용이 제한됩니다. :)