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

공휴일 자동 업데이트 달력

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

원하는 휴일을 마음대로 입력해서 쓰는 달력 만들기! - 자동 업데이트 달력

이 강의에서는 DATE·WEEKDAY 함수와 조건부서식을 활용해, 공휴일과 일정이 자동으로 업데이트되는 엑셀 만년달력을 제작하는 방법을 다룹니다. 첫째주 날짜 계산부터 휴일 데이터 매칭, 기준월 외 날짜의 색상 처리, 연결된 그림 기능을 활용한 디자인까지 전 과정을 단계별로 정리해 매월 새로 만들지 않아도 되는 자동화 달력을 완성할 수 있습니다.

공휴일 자동 업데이트 달력
DOWNLOADS

실습자료를 준비했어요

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

실습 가이드

엑셀 달력 만들기는 생각보다 어렵지 않습니다. 몇 가지 함수와 조건부서식을 응용하면 공휴일과 일정이 자동으로 업데이트되는 만년달력, 자동달력을 누구나 손쉽게 제작할 수 있습니다. 이번 강의에서는 엑셀 자동달력을 단계별로 만들어 보겠습니다.

엑셀 자동 달력 만들기

패치노트
  • 2019년 1월 15일 :
    일요일부터 시작하는 달력 만들기 관련 내용을 추가하였습니다.
  • 2019년 11월 12일 :
    연간 달력 제작 방법을 추가하였습니다.
  • 2020년 3월 8일 :
    익월 표시 달력의 수식을 수정하였습니다. (12월에서 +1을 더할 때 13으로 계산되어 발생하던 오류를 보완)

    =IFERROR(IF(IF('달력'!$S$2+1<>MONTH(셀+1),"",셀+1),"")
    =IFERROR(IF(IF(('달력'!$S$2+1)>12,1,'달력'!$S$2+1)<>MONTH(셀+1),"",셀+1),"")
    '// 12월에서 '+1'을 더해 13이 될 경우, 1월을 반환합니다.

엑셀 달력 자동화 양식 다운로드

더욱 다양한 기능이 포함된 엑셀 달력 자동화 양식을 무료 서식 페이지에 함께 올려두었습니다. 아래 링크에서 바로 확인하실 수 있습니다.

달력 첫째주 날짜 함수공식
= COLUMNS(열범위)/2 + DATE(년,월,1) - WEEKDAY(DATE(년,월,1),2)
함수 함수 설명
COLUMNS 함수 선택한 범위의 열 개수를 반환합니다.
DATE 함수 년/월/일 값을 받아 해당 날짜를 반환합니다.
WEEKDAY 함수 선택한 날짜의 요일을 지정한 형식의 일련번호로 반환합니다. (예: 일요일=1, 월요일=2 등)
예제파일에 적용된 함수공식
=COLUMNS($A$6:F$6)/2+DATE($Q$2,$S$2,1)-WEEKDAY(DATE($Q$2,$S$2,1),2)
  1. COLUMNS($A$6:F$6)
    '// A6~F6 범위의 열 개수를 반환합니다.
    = 6
  2. DATE($Q$2,$S$2,1)
    '// Q2셀 : 년도를 받아옵니다.
    '// S2셀 : 월을 받아옵니다.
    = 선택한 년도와 월의 1일을 반환합니다.
  3. WEEKDAY(DATE($Q$2,$S$2,1),2)
    '// 매월 1일의 요일번호를 반환합니다. WEEKDAY 함수의 두 번째 인수로 '2'를 입력했습니다.
    = 월요일(1)부터 일요일(7)까지의 요일번호를 반환합니다.
  4. = COLUMNS($A$6:F$6)/2+DATE($Q$2,$S$2,1)-WEEKDAY(DATE($Q$2,$S$2,1),2)
    = 6/2 + ‘2019/2/1’ – WEEKDAY(‘2019/2/1’,2)
    = 3 + ‘2019/2/1’ – 5
    = ‘2019/2/1’ – 2
    = ‘2019/1/30’
달력 둘째주 이후 날짜를 표시하는 함수공식
= 이전셀 + 1
'// 이전 날짜에 +1을 순차적으로 더해 달력을 완성합니다.
해당 날짜가 휴일일 때 휴일명을 불러오는 함수공식
=IFERROR(VLOOKUP(셀,휴일!$A:$B,2,0),"")
함수 함수 설명
IFERROR 함수 입력한 수식이 오류를 반환할 경우, 오류 대신 지정한 값을 출력합니다.
VLOOKUP 함수 범위의 맨 좌측 열에서 값을 찾은 뒤, 같은 행의 다른 열 값을 반환합니다. 찾으려는 값이 범위에 없을 경우 #N/A 오류를 반환합니다.
달력 예제파일에 적용된 함수공식
=IFERROR(VLOOKUP( 2019-01-02,휴일!$A:$B,2,0),"")
  1. = VLOOKUP( 2019-01-02, 휴일!$A:$B, 2, 0 )
    '// 2019-01-02 를 휴일 시트의 A열에서 검색한 뒤, 일치하는 값이 있으면 같은 행의 B열 값을 반환합니다.
    '// A열에 2019-01-02 이 없으면 #N/A 오류를 반환합니다.
    = #N/A
  2. = IFERROR( #N/A, "" )
    '// VLOOKUP 함수에서 #N/A 오류가 반환될 경우 IFERROR 함수가 빈 문자열을 출력합니다.
    = ""
자동 달력 조건부서식 설정하기

본 예제파일에는 2개의 조건부서식이 미리 적용되어 있으며, 모든 서식에 동일한 원리의 수식이 사용되었습니다. 따라서 아래 예시만 이해하면, 엑셀 달력에 적용된 나머지 조건부서식도 손쉽게 응용할 수 있습니다.

  1. 엑셀 달력의 범위를 B6부터 N17까지 선택합니다. 이때 기준셀이 B6이 되도록 반드시 B6셀을 시작점으로 범위를 지정해야 합니다.

    엑셀 달력 조건부서식 범위 선택

  2. 리본 메뉴의 [홈] - [조건부서식] - [새 규칙]으로 이동합니다.

    달력 조건부서식 새규칙

  3. 새 규칙 창에서 '수식을 사용하여 서식을 지정할 셀 결정'을 선택한 뒤, 아래 수식을 복사해 붙여 넣습니다. 이후 [서식] 버튼을 클릭하여 달력에 적용할 조건부서식을 설정합니다.
    =AND(MONTH(B6)<>$S$2,B6<>"")

    달력 새규칙 서식 입력

  4. [글꼴] 탭으로 이동한 뒤 색상을 옅은 회색으로 선택하고 [확인] 버튼을 눌러 서식 설정을 마무리합니다.

    회색 글꼴 적용하기

  5. 방금 적용한 조건부서식은, 해당 셀이 빈 셀이 아니면서 기준월과 다를 경우, 즉 기준월이 아닌 전월 또는 익월에 해당할 때 글꼴 색상을 회색으로 표시하는 규칙입니다.
    =AND(MONTH(B6)<>$S$2,B6<>"")
    '// MONTH(B6) <> $S$2 : 해당 셀이 기준월과 다르고
    '// B6<>"" : 해당 셀이 빈 셀이 아닐 경우 조건부서식을 적용합니다.

연결된 그림 기능은 엑셀 2007 이후 버전에서 지원되는 기능입니다. 아래 절차에 따라 달력에 동적인 디자인을 적용해 보겠습니다.

  1. [연결이미지] 시트로 이동한 뒤, 달력 머리글로 사용할 P2:S2 범위를 복사합니다.

    달력 머릿글 범위 복사

  2. [달력] 시트로 이동해 J2 셀을 우클릭한 뒤, '선택하여 붙여넣기' - '연결된 그림'으로 붙여 넣습니다.

    연결된 그림 붙여넣기

  3. 이어서 [연결이미지] 시트의 B2:N10 범위도 복사한 뒤, [달력] 시트의 B18셀에 동일한 방식으로 연결된 그림으로 붙여 넣어 마무리합니다.

    엑셀 익월 달력 추가 완료

자주묻는질문

Q1. 일요일부터 시작하는 달력을 만들고 싶어요

달력 첫째주 날짜를 계산하는 공식에서 WEEKDAY 함수의 두 번째 인수만 변경하면, 일요일부터 시작하는 달력으로 손쉽게 바꿀 수 있습니다. 변경된 공식은 아래와 같습니다.

=COLUMNS(열범위)/2+DATE(년,월,1)-WEEKDAY(DATE(년,월,1),1)
  • WEEKDAY 함수의 두 번째 인수를 '1'로 변경하면, 반환되는 일련번호가 일요일(1) ~ 토요일(7) 순서로 변경됩니다.
  • 달력의 토요일과 일요일 서식 색상을 변경하면, 아래와 같이 일요일부터 시작하는 달력이 간단하게 완성됩니다.

    달력 휴일 색상 변경

Q2. 엑셀 연간 만년달력을 만들고 싶어요

달력 날짜 계산에 사용한 함수를 그대로 복사해 붙여 넣으면 연간달력 또한 손쉽게 제작할 수 있습니다. 완성된 만년달력은 완성파일의 '달력(연간)' 시트에 함께 첨부해 드렸으니 참고해 주세요.

엑셀 달력 만년달력 만들기

댓글 73
4.9 (51개 평가)
leena
leena 2019.12.24 03:47
썜 괄호하나 빠져써여
= AND(MONTH(B6)$S$2),B6””) ->= AND((MONTH(B6)$S$2),B6””)
오빠두엑셀
오빠두엑셀 작성자 2020.01.08 01:47
헛헛!! 오타가 있었네요 ㅠ-ㅠ 알려주셔서 넘넘 감사합니다~^_^*
조용은
조용은 2020.01.07 13:45
안녕하세요 강의 보고 궁금한 점이 있어서 문의 드려요 첫째주 날짜입력방식의 함수 사용을 왜 저렇게 표현해서 값을 구하는지 이해가 되지 않아서 문의 드려요 다른 방식으로 표현했을 때 작동이 안되거나 문제가 생기는지 모르겠네요 @_@
오빠두엑셀
오빠두엑셀 작성자 2020.01.08 01:50
안녕하세요?^-^ 수식사용에는 정답이 없다고 생각합니다..
DATE 함수와 WEEKDAY 함수를 통한 계산만 맞다면, COLUMN 함수나 COUNT 함수를 사용하셔도 잘 동작하실거에요 ^_^*
박낸낸
박낸낸 2020.01.14 13:16
회사에 입사하면서 엑셀을 여기서 보고 배우면 좋다고 들어 왔는데 정말 차근차근 잘 알아갈 수 있어 너무 좋네요 ! 이런 좋은 정보 감사합니다.
정지윤
정지윤 2020.02.01 22:13
안녕하세요! 강의 잘 들었습니다.
질문이 있는데, 혹시 같은 날짜에 두개 이상의 일정이 있을 시에는,
동시에 이 두 일정을 표시하지 못하는것인가요?
엑셀 시트 상 더 상단에 작성된 일정만 표시가 되거든요.
혹시 방법이 있는지 궁금합니다.
오빠두엑셀
오빠두엑셀 작성자 2020.02.01 23:52
정지윤님 안녕하세요~^^
두개 이상 일정이 있을경우, 줄바꿈 (Alt+Enter)로 입력하신 뒤 [홈] 탭의 [자동 줄바꿈]을 활성화해보시겠어요?
달력시트의 셀도 마찬가지로 [자동 줄바꿈]을 활성화하시면 됩니다.^-^

좀 더 개선된 달력을 작성해서 업데이트해드릴 예정이니, 이후에 다시 방문해 주시면 더 나은 양식을 확인하실 수 있을겁니다.
제 답변이 도움이 되셨길 바랍니다.
감사합니다.
l804325
l804325 2020.02.10 10:39
선생님, 달력에 빈칸을 추가해서 일정을 기입했는데 다른 달에도 동일한 일정으로 계속 반영되는데 다른달에 반영안되고 빈칸으로 하는 방법있을까요? (예, 2월1일 00생일- > 3월1일 00생일 -> 4월1일00생일...)
오빠두엑셀
오빠두엑셀 작성자 2020.02.11 04:22
안녕하세요~^^
이전달/지난달에는 휴일여도 휴일을 표시안하고 싶으신거지요?
그럴 경우 예제파일의 B7셀을 기준으로 아래와 같이 수식을 변경해보시겠어요?^^
이후 다른 셀에도 복사/붙여넣기 하시면 됩니다.
=IFERROR(IF($S$2=B6,VLOOKUP(B6,휴일!$A:$B,2,0),""),"")

제 답변이 도움이 되셨길 바랍니다.
감사합니다.^^*
소나로사
소나로사 2020.03.08 16:02
강의 잘 보았습니다. 그리고 공부도 많이 되었습니다.
한가지 옥에 티가 있어서요. 매년 12월일때 다음해 1월 달력이 3째주부터 나오질 않아서 나름 수정을 해보았습니다.
=IFERROR(IF((달력!$S$2+1)MONTH(N7+1),"",N7+1),"") 을 아래와 같이
=IFERROR(IF(DAY(N7+1)=DAY(1),"",IF(달력!$S$212,IF((달력!$S$2+1)=MONTH(N7),N7+1,""),IF((달력!$S$2-11)=MONTH(N7),N7+1,""))),"")
작동은 잘 되는데요(고민 많이 했습니다). 위 수식을 간략하게 줄일수 있을지요?
오빠두엑셀
오빠두엑셀 작성자 2020.03.09 00:00
안녕하세요~!
헛~ 수식에 오류가 있었습니다~~!^^;; 완성파일 수정해드렸으니 확인해보시겠어요?
수식은 아래와 같이 수정하시면 됩니다.
=IFERROR(IF(IF(('달력'!$S$2+1)>12,1,'달력(일-월)'!$S$2+1)MONTH(N33+1),"",N33+1),"")
글씨 굵은 부분이 수정된 부분입니다.
감사합니다!
소나로사
소나로사 2020.03.09 04:43
감사합니다. 강의를 보면서 많은걸 배웁니다
소나로사
소나로사 2020.03.09 05:49
강제로 1로 바꿔주는 것을 생각 못했네요,,^^ 감사합니다
김성규
김성규 2020.03.12 12:08
정리가 잘되어있어서 좋네영
호야
호야 2020.03.15 00:43
어려워지네요 잘보고 갑니다
excellguy
excellguy 2020.03.20 12:37
와우~! 어렵지만. . 매력 있습니다~!
말리노
말리노 2020.03.24 11:04
안녕하세요. 강의 감사합니다.

강의 중에
=NOT(ISERROR(VLOOKUP(셀,휴일!$A:$A,1,0)))
함수를 사용하여 휴일을 빨갛게 표시하는 조건부 서식을 사용하셨는데
이때 왜
=VLOOKUP(셀,휴일!$A:$A,1,0)
함수를 사용하지 않으신건지 궁금합니다.
오빠두엑셀
오빠두엑셀 작성자 2020.03.24 18:06
안녕하세요?^^
조건부서식은 결과가 TRUE 일때 해당 서식을 적용합니다.
=VLOOKUP(셀,휴일!$A:$A,1,0)

을 입력할 경우, 해당 날짜가 결과값으로 반환됩니다. 따라서,
=NOT(ISERROR(VLOOKUP(셀,휴일!$A:$A,1,0)))

을 입력해서 VLOOKUP 결과가 오류가 아닐경우 TRUE 를 반환하도록 수식을 입력합니다 ^^
제 답변이 도움이 되셨길 바랍니다.
감사합니다.