Computer >> 컴퓨터 >  >> 소프트웨어 >> Office

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

이 글에서는 템플릿 없이 엑셀에서 직접 달력을 만드는 방법을 소개합니다. 일상적으로 업무나 프로젝트마다 마감 기한을 관리하게 되는데, 이때 자신만의 달력을 갖춰두는 것은 매우 중요합니다. 달력은 업무 마감 시점을 잊지 않도록 상기시켜 주는 역할을 합니다. 게다가 엑셀로 직접 달력을 만들면 원하는 대로 수정하고 확장할 수 있어 실무에서 큰 장점이 됩니다.

템플릿 없이 엑셀 달력 만들기: 2가지 쉬운 예제

템플릿 없이 달력을 만드는 두 가지 예제를 다룹니다. 아래 단계를 순서대로 따라 하면 누구나 스스로 엑셀 달력을 만들 수 있습니다.

1. 엑셀에서 월간 달력 만들기 (VBA 활용)

먼저 템플릿 없이 월간 달력을 만드는 방법입니다. VBA 매크로를 활용하면 몇 번의 클릭만으로 해당 월의 달력을 자동으로 생성할 수 있습니다.

단계:

  • 먼저 Alt + F11 키를 눌러 VBA 편집기 창을 엽니다.
  • 삽입 > 모듈 메뉴를 선택해 새 모듈을 추가합니다.

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

  • 다음으로 아래 코드를 모듈 창에 입력합니다.
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

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

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

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

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

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

더 읽어보기: 엑셀에서 월간 달력 만드는 방법 (3가지 효과적인 방법)

2. 엑셀에서 연간 달력 만들기 (함수 활용)

다음은 함수를 활용해 연간 달력을 만드는 방법입니다. SEQUENCE 함수와 WEEKDAY 함수를 조합하면 별도의 매크로 없이 수식만으로 달력을 자동 생성할 수 있습니다. 참고로 SEQUENCE 함수는 엑셀 2021 및 Microsoft 365 버전부터 지원됩니다.

단계:

  • 먼저 아래 이미지처럼 연도(B4)와 월(B6)을 입력할 셀을 포함해 데이터를 구성합니다.

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

  • 다음으로 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),"")

템플릿 없이 엑셀에서 달력 만드는 방법 (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 키를 누르면 해당 월의 달력 결과를 얻을 수 있습니다.

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

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

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

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

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

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

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

  • 일곱 번째, 새 서식 규칙 대화 상자에서 규칙 유형 선택 항목의 수식을 사용하여 서식을 지정할 셀 결정 옵션을 고르고, 참인 경우 적용할 서식 입력란에 아래 수식을 입력한 뒤 미리 보기에서 원하는 색을 지정하고 확인을 누릅니다.
=ISNUMBER(VLOOKUP(B8,Holidays!$C:$C,1,0))

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

🔎 수식 작동 방식

  • 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 키를 누르면 해당 월의 공휴일이 표시된 결과를 얻을 수 있습니다.

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

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

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

템플릿 없이 엑셀에서 달력 만드는 방법 (2가지 예제)

더 읽어보기: 엑셀에서 연간 달력 만드는 방법 (쉬운 단계)

마치며

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

관련 글

  • 엑셀에서 대화형(인터랙티브) 달력 만드는 방법 (2가지 쉬운 방법)
  • 엑셀로 빈 달력 만들기 (무료 템플릿 다운로드)
  • 엑셀에서 주간 달력 만드는 방법 (3가지 방법)