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

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

바쁜 일정을 효율적으로 관리하고 미리 계획을 세우고 싶다면 엑셀(Excel) 달력이 큰 도움이 됩니다. 이 글에서는 엑셀에서 연간 달력을 만드는 방법을 단계별로 자세히 설명해 드립니다. 특히 여기서 소개하는 달력은 동적(Dynamic)이면서 인터랙티브합니다. 즉, 연도 값만 바꾸면 달력이 자동으로 업데이트됩니다. 또한 마지막에는 엑셀 VBA를 활용해 월간 달력을 만드는 방법까지 함께 다룹니다.

아래 링크에서 실습용 통합 문서를 다운로드할 수 있습니다.

엑셀에서 연간 달력 만들기: 4단계 완성

본격적인 튜토리얼에 들어가기 전에 최종 결과물이 어떤 모습인지 먼저 확인해 보겠습니다. 아래 예시는 연간 달력으로, 토요일과 일요일(주말)은 연한 주황색으로, 공휴일은 진한 주황색으로 표시됩니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

이 튜토리얼은 Microsoft Excel 365 버전을 기준으로 작성되었지만, 사용 중인 버전에 따라 다른 버전을 활용하셔도 무방합니다.

📌 1단계: 기본 골격 만들기

  • 먼저 12개월을 3열 × 4행 구조로 배치하여 달력의 전체 레이아웃을 잡습니다.
  • 다음으로 요일 7개(일요일~토요일)를 입력하고, 주말인 토요일일요일은 색상으로 강조합니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

📌 2단계: 월 이름 입력하기

  • B4 셀로 이동한 후 숫자 1을 입력하고, 키보드에서 Ctrl + 1 키를 누릅니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

그러면 셀 서식(Format Cells) 대화 상자가 열립니다.

  • 표시 형식(Number) 탭으로 이동 >> 사용자 지정(Custom) 옵션 선택 >> 형식(Type) 입력란에 큰따옴표를 포함해 "January"라고 입력 >> 마지막으로 글꼴(Font) 탭으로 이동합니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

  • 이어서 굵은 기울임꼴(Bold-Italic) 글꼴 스타일을 선택하고 원하는 색상(여기서는 보라색)을 지정한 후 확인(OK) 버튼을 클릭합니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

  • 그런 다음 B4:H4 셀 범위를 선택하고 Ctrl + 1 키를 눌러 셀 서식 창을 엽니다.
  • 맞춤(Alignment) 탭으로 이동 >> 가로(Horizontal) 항목에서 선택 영역의 가운데 정렬(Center Across Selection) 옵션을 선택 >> 확인 버튼을 누릅니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

완료하면 아래 이미지처럼 January(1월)라는 월 이름이 표시됩니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

  • 같은 방법으로 나머지 월도 반복해서 입력하면 결과물은 아래 사진과 같습니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

📌 3단계: 엑셀 함수로 동적 달력 만들기

  • 세 번째 단계에서는 B6 셀로 이동하여 아래 수식을 입력합니다.

=IF(MONTH(DATE($B$2,$B$4,1)+SEQUENCE(6,7)-WEEKDAY(DATE($B$2,$B$4,1),2))=$B$4,DATE($B$2,$B$4,1)+SEQUENCE(6,7)-WEEKDAY(DATE($B$2,$B$4,1),2),"")

여기서 B2 셀은 연도 2022, B4 셀은 1월(January)을 각각 나타냅니다.

📃 참고: SEQUENCE 함수는 Excel 365, Excel 2021 및 Excel 웹 버전에서만 사용할 수 있으므로, 호환 가능한 버전을 사용 중인지 꼭 확인하세요.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

  • 이제 Enter 키를 누르면 수식이 자동으로 확장되어 1월의 모든 날짜가 채워집니다.

📃 참고: Ctrl + 1 키를 눌러 셀 서식 창을 열고, 날짜 형식을 'dd'만 표시하도록 변경해야 합니다. 그래야 날짜 대신 숫자만 깔끔하게 보입니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

모든 과정을 마치면 결과물은 아래 이미지와 같습니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

📌 4단계: 공휴일 표시하기

  • 마지막 단계에서는 새 시트에 아래와 같이 공휴일 목록을 작성합니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

  • 그다음 B6:H11 범위를 선택 >> 조건부 서식(Conditional Formatting) 드롭다운 메뉴로 이동 >> 새 규칙(New Rule) 옵션을 선택합니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

즉시 새 서식 규칙(New Formatting Rule) 마법사가 열립니다.

  • 수식을 사용하여 서식을 지정할 셀 결정(Use a formula to determine which cells to format) 옵션을 선택합니다.
  • 그런 다음 규칙 설명(Rule Description)에 아래 수식을 입력합니다.

=ISNUMBER(VLOOKUP(B6,Holidays!$C:$C,1,0))

여기서 B6 셀은 1월의 월요일을 가리키며, Holidays!$C:$CHolidays 시트의 날짜 열을 의미합니다.

수식 분석:

  • VLOOKUP(B6,Holidays!$C:$C,1,0)) → VLOOKUP 함수는 테이블의 가장 왼쪽 열에서 값을 찾은 후, 같은 행에서 지정한 열의 값을 반환합니다. 여기서 B6(lookup_value 인수)는 Holidays!$C:$C(table_array 인수) 배열에서 조회됩니다. 다음 1(col_index_num 인수)은 반환할 열 번호를, 마지막 0(range_lookup 인수)은 조회 값의 정확한 일치(Exact match)를 의미합니다.
    • 결과 → #N/A
  • ISNUMBER(VLOOKUP(B6,Holidays!$C:$C,1,0)) 위 결과가 적용되면 다음과 같이 됩니다.
    • ISNUMBER(#N/A) → ISNUMBER 함수는 값이 숫자인지 확인하고 TRUE 또는 FALSE를 반환합니다. 여기서 #N/Avalue 인수이며, 숫자가 아니므로 함수는 FALSE를 반환합니다.
    • 결과 → FALSE

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

이제 1월 1일 공휴일이 진한 주황색으로 강조 표시됩니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

같은 방식으로 나머지 월에도 동일한 절차를 반복하면 아래 스크린샷과 같은 결과물을 얻을 수 있습니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

VBA로 월간 달력 자동 생성하기

연간이 아니라 월간 달력을 만들고 싶다면 어떻게 해야 할까요? 다음 방법을 활용하면 됩니다! 여기서는 VBA 코드를 사용해 작업을 자동화합니다. 바로 살펴보겠습니다.

📌 단계:

  • 우선 리본 메뉴에서 개발 도구(Developer) 탭으로 이동 >> Visual Basic 버튼을 클릭합니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

새 창으로 Visual Basic 편집기(VBE)가 열립니다.

  • 다음으로 삽입(Insert) 탭으로 이동 >> 모듈(Module)을 선택합니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

편의를 위해 아래 코드를 복사해서 모듈 창에 붙여 넣으세요.

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

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

  • 이제 VBA 창을 닫고 >> 매크로(Macros) 버튼을 클릭합니다.

매크로 대화 상자가 열립니다.

  • CalendarMaker 매크로를 선택 >> 실행(Run) 버튼을 누릅니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

그러면 입력 상자(Input box)가 열리는데, 아래와 같이 월 이름(Month Name)연도(Year)를 입력합니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

실행이 완료되면 결과물은 아래 사진과 같습니다.

엑셀에서 연간 달력 만드는 방법: 초보자도 따라 하는 4단계 가이드

마무리

이 글이 엑셀에서 연간 달력을 만드는 방법을 이해하는 데 도움이 되었기를 바랍니다. 궁금한 점이 있다면 아래 댓글로 남겨주세요. 또한 이와 같은 유용한 엑셀 팁을 더 보고 싶다면 올인원 엑셀 솔루션 사이트인 ExcelDemy를 방문해 보세요.

함께 읽으면 좋은 글

  • 엑셀에서 빈 달력 만드는 방법 (무료 템플릿 다운로드)