이 글에서는 템플릿 없이 엑셀에서 직접 달력을 만드는 방법을 소개합니다. 일상적으로 업무나 프로젝트마다 마감 기한을 관리하게 되는데, 이때 자신만의 달력을 갖춰두는 것은 매우 중요합니다. 달력은 업무 마감 시점을 잊지 않도록 상기시켜 주는 역할을 합니다. 게다가 엑셀로 직접 달력을 만들면 원하는 대로 수정하고 확장할 수 있어 실무에서 큰 장점이 됩니다.
템플릿 없이 엑셀 달력 만들기: 2가지 쉬운 예제
템플릿 없이 달력을 만드는 두 가지 예제를 다룹니다. 아래 단계를 순서대로 따라 하면 누구나 스스로 엑셀 달력을 만들 수 있습니다.
1. 엑셀에서 월간 달력 만들기 (VBA 활용)
먼저 템플릿 없이 월간 달력을 만드는 방법입니다. VBA 매크로를 활용하면 몇 번의 클릭만으로 해당 월의 달력을 자동으로 생성할 수 있습니다.
단계:
- 먼저 Alt + F11 키를 눌러 VBA 편집기 창을 엽니다.
- 삽입 > 모듈 메뉴를 선택해 새 모듈을 추가합니다.

- 다음으로 아래 코드를 모듈 창에 입력합니다.
Sub CalendarMaker()
'This code was taken from extendoffice.com
ActiveSheet.Protect DrawingObjects:=False, Contents:=False, _
Scenarios:=False
Application.ScreenUpdating = False
On Error GoTo MyErrorTrap
Range("a1:g14").Clear
MyInput = InputBox("Type in Month and year for Calendar ")
If MyInput = "" Then Exit Sub
StartDay = DateValue(MyInput)
If Day(StartDay) <> 1 Then
StartDay = DateValue(Month(StartDay) & "/1/" & _
Year(StartDay))
End If
Range("a1").NumberFormat = "mmmm yyyy"
With Range("a1:g1")
.HorizontalAlignment = xlCenterAcrossSelection
.VerticalAlignment = xlCenter
.Font.Size = 18
.Font.Bold = True
.RowHeight = 35
End With
With Range("a2:g2")
.ColumnWidth = 11
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = xlHorizontal
.Font.Size = 12
.Font.Bold = True
.RowHeight = 20
End With
Range("a2") = "Sunday"
Range("b2") = "Monday"
Range("c2") = "Tuesday"
Range("d2") = "Wednesday"
Range("e2") = "Thursday"
Range("f2") = "Friday"
Range("g2") = "Saturday"
With Range("a3:g8")
.HorizontalAlignment = xlRight
.VerticalAlignment = xlTop
.Font.Size = 18
.Font.Bold = True
.RowHeight = 21
End With
Range("a1").Value = Application.Text(MyInput, "mmmm yyyy")
DayofWeek = Weekday(StartDay)
CurYear = Year(StartDay)
CurMonth = Month(StartDay)
FinalDay = DateSerial(CurYear, CurMonth + 1, 1)
Select Case DayofWeek
Case 1
Range("a3").Value = 1
Case 2
Range("b3").Value = 1
Case 3
Range("c3").Value = 1
Case 4
Range("d3").Value = 1
Case 5
Range("e3").Value = 1
Case 6
Range("f3").Value = 1
Case 7
Range("g3").Value = 1
End Select
For Each cell In Range("a3:g8")
RowCell = cell.Row
ColCell = cell.Column
If cell.Column = 1 And cell.Row = 3 Then
ElseIf cell.Column <> 1 Then
If cell.Offset(0, -1).Value >= 1 Then
cell.Value = cell.Offset(0, -1).Value + 1
If cell.Value > (FinalDay - StartDay) Then
cell.Value = ""
Exit For
End If
End If
ElseIf cell.Row > 3 And cell.Column = 1 Then
cell.Value = cell.Offset(-1, 6).Value + 1
If cell.Value > (FinalDay - StartDay) Then
cell.Value = ""
Exit For
End If
End If
Next
For x = 0 To 5
Range("A4").Offset(x * 2, 0).EntireRow.Insert
With Range("A4:G4").Offset(x * 2, 0)
.RowHeight = 65
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlTop
.WrapText = True
.Font.Size = 10
.Font.Bold = False
.Locked = False
End With
With Range("A3").Offset(x * 2, 0).Resize(2, _
7).Borders(xlLeft)
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Range("A3").Offset(x * 2, 0).Resize(2, _
7).Borders(xlRight)
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
Range("A3").Offset(x * 2, 0).Resize(2, 7).BorderAround _
Weight:=xlThick, ColorIndex:=xlAutomatic
Next
If Range("A13").Value = "" Then Range("A13").Offset(0, 0) _
.Resize(2, 8).EntireRow.Delete
ActiveWindow.DisplayGridlines = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
Scenarios:=True
ActiveWindow.WindowState = xlMaximized
ActiveWindow.ScrollRow = 1
Application.ScreenUpdating = True
Exit Sub
MyErrorTrap:
MsgBox "You may not have entered your Month and Year correctly." _
& Chr(13) & "Spell the Month correctly" _
& " (or use 3 letter abbreviation)" _
& Chr(13) & "and 4 digits for the Year"
MyInput = InputBox("Type in Month and year for Calendar")
If MyInput = "" Then Exit Sub
Resume
End Sub

- 매크로를 실행하면 나타나는 입력 상자에 원하는 월과 연도를 입력하고 확인(OK)을 누릅니다.

- 마지막으로 실행(RUN) 버튼 또는 F5 키를 누르면 원하는 달력이 완성됩니다.

더 읽어보기: 엑셀에서 월간 달력 만드는 방법 (3가지 효과적인 방법)
2. 엑셀에서 연간 달력 만들기 (함수 활용)
다음은 함수를 활용해 연간 달력을 만드는 방법입니다. SEQUENCE 함수와 WEEKDAY 함수를 조합하면 별도의 매크로 없이 수식만으로 달력을 자동 생성할 수 있습니다. 참고로 SEQUENCE 함수는 엑셀 2021 및 Microsoft 365 버전부터 지원됩니다.
단계:
- 먼저 아래 이미지처럼 연도(B4)와 월(B6)을 입력할 셀을 포함해 데이터를 구성합니다.


- 다음으로 B8 셀에 아래 수식을 입력합니다.
=IF(MONTH(DATE($B$4,$B$6,1)+SEQUENCE(6,7)-WEEKDAY(DATE($B$4,$B$6,1),2))=$B$6,DATE($B$4,$B$6,1)+SEQUENCE(6,7)-WEEKDAY(DATE($B$4,$B$6,1),2),"")
🔎 수식 작동 방식
- DATE($B$4,$B$6,1): 이 부분은 DATE 함수가 적용될 셀, 즉 선택된 연도와 월의 첫째 날 날짜를 의미합니다.
- WEEKDAY(DATE($B$4,$B$6,1),2): 이 부분은 날짜와 요일 정보를 함께 고려하여 달력의 시작 위치를 계산합니다.
- (DATE($B$4,$B$6,1)+SEQUENCE(6,7)-WEEKDAY(DATE($B$4,$B$6,1),2))=$B$6, DATE(...): 이 부분은 날짜와 요일을 고려해 6행 7열 배열로 날짜를 순서대로 정렬합니다.
- 전체 IF 수식: 월, 날짜, 요일 조건을 모두 포함하여 해당 월에 속한 날짜만 표시하고 나머지는 빈 값(" ")으로 처리합니다.
- 세 번째, Enter 키를 누르면 해당 월의 달력 결과를 얻을 수 있습니다.

- 네 번째, 같은 단계를 반복하면 아래 이미지처럼 1년 전체 12개월의 달력을 완성할 수 있습니다.


- 다섯 번째, 현재 연간 달력에 공휴일을 표시하기 위해 새 워크시트에 아래 이미지와 같이 공휴일 데이터를 준비합니다.

- 여섯 번째, 달력 데이터 범위를 선택한 후 홈 > 조건부 서식 > 새 규칙 메뉴로 이동합니다.

- 일곱 번째, 새 서식 규칙 대화 상자에서 규칙 유형 선택 항목의 수식을 사용하여 서식을 지정할 셀 결정 옵션을 고르고, 참인 경우 적용할 서식 입력란에 아래 수식을 입력한 뒤 미리 보기에서 원하는 색을 지정하고 확인을 누릅니다.
=ISNUMBER(VLOOKUP(B8,Holidays!$C:$C,1,0))
🔎 수식 작동 방식
- VLOOKUP(B8, Holidays!$C:$C, 1, 0): VLOOKUP 함수는 테이블의 가장 왼쪽 열에서 값을 찾아 지정한 열의 같은 행 값을 반환합니다. 여기서 B8(lookup_value 인수)은 Holidays!$C:$C(table_array 인수) 범위에서 검색되며, 1(col_index_num 인수)은 조회 값의 열 번호, 0(range_lookup 인수)은 정확히 일치를 의미합니다.
- ISNUMBER(VLOOKUP(B8, Holidays!$C:$C, 1, 0)): ISNUMBER 함수는 값이 숫자인지 검사하여 TRUE 또는 FALSE를 반환합니다. 즉, 달력의 날짜가 공휴일 목록에 있으면 TRUE가 되어 지정한 서식이 적용됩니다.
- 여덟 번째, Enter 키를 누르면 해당 월의 공휴일이 표시된 결과를 얻을 수 있습니다.

- 마지막으로, 같은 단계를 반복하면 아래 이미지처럼 1년 전체 달력에 공휴일까지 표시된 최종 결과를 얻을 수 있습니다.


더 읽어보기: 엑셀에서 연간 달력 만드는 방법 (쉬운 단계)
마치며
지금까지 템플릿 없이 엑셀에서 달력을 만드는 두 가지 방법을 살펴보았습니다. VBA 매크로를 이용하면 월간 달력을 빠르게 자동 생성할 수 있고, 함수를 활용하면 연간 달력에 공휴일 표시까지 손쉽게 구현할 수 있습니다. 위의 방법들이 여러분의 업무에 도움이 되기를 바랍니다. 더 많은 엑셀 팁이 궁금하다면 ExcelDemy 웹사이트를 확인해 보세요. 궁금한 점이나 제안 사항이 있다면 아래 댓글로 남겨주세요. 최선을 다해 답변드리겠습니다.
관련 글
- 엑셀에서 대화형(인터랙티브) 달력 만드는 방법 (2가지 쉬운 방법)
- 엑셀로 빈 달력 만들기 (무료 템플릿 다운로드)
- 엑셀에서 주간 달력 만드는 방법 (3가지 방법)