• 최초 작성일: 2006-01-19
  • 최종 수정일: 2026-09-30
  • 조회수: 12 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 간단 달력 만들기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

이 사이트의 회원 한 분께서 다음과 같은 메일을 보내 주셨습니다.

안녕하세요. Exceller님! 먼저 보잘 것 없는 내용들을 잊지 않으시고 강좌파일로 올려 주시고 격려해 주심에 머리숙여 감사드립니다.

평소 존경하는 Exceller님의 격려에 힘입어 연말도 가까워 지고 해서 간단한 달력만들기 예제파일을 만들어 봤습니다. 첨부파일은 역시 전과 같이 다루어 주셨으면 합니다.^^

Exceller 사이트에 거의 상주하다시피 하시면서 좋은 답변을 많이 남겨주시는 어느 고수님의 글입니다(누구신지는 다들 짐작하실 듯… ^^).

지난 해에 보내주신 것인데, Exceller가 경황이 좀 없어서 이제서야 소개해 드림을 너른 마음으로 양해해 주시기 바랍니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

간단 달력 만들기

핵심 요약: 콤보 상자로 만드는 간단 달력

년/월 콤보 상자에서 값을 고르면 해당 월의 날짜와 요일이 표시되는 달력입니다. 파일을 열 때 콤보 상자가 오늘 날짜로 맞춰집니다.

  • 1단계: Workbook_Open 이벤트에서 콤보 상자에 연도와 월 목록을 채웁니다.
  • 2단계: 현재 연도와 월이 선택되도록 지정하고 Combo_Change를 호출합니다.
  • 3단계: DateSerial로 말일을 구해 1일부터 말일까지 날짜와 요일을 나열합니다.

Step 1: 완성된 달력 살펴보기

일단 아래 버튼을 눌러서 달력의 형태를 살펴보고 오세요.

Stage 시트에는 년과 월을 고르는 두 개의 콤보 상자(YearCombo, MonthCombo)가 있고, 선택한 년/월에 맞추어 1일부터 말일까지의 날짜와 요일이 가로 방향으로 표시됩니다.

Step 2: Workbook_Open 이벤트 프로시저

VB Editor 상태(<Alt> + <F11>)에서 ThisWorkbook 개체를 더블 클릭하면 다음과 같은 Workbook_Open 이벤트 핸들러 프로시저의 내용이 나타납니다. 이것은 파일을 열 때 Stage 시트에 있는 두 개의 콤보 상자(년, 월)의 내용을 오늘 날짜(정확하게 말하자면 현재 컴퓨터 시스템에 세팅되어 있는 날짜)로 맞추기 위한 것입니다.

코드에 대한 설명은 생략합니다. 보시다가 이해가 안되는 부분이 있으면 홈 페이지 Q&A 게시판에 질문주시기 바랍니다.

Private Sub Workbook_Open()

    Dim sht As Worksheet
    Dim YearCombo As DropDown
    Dim MonthCombo As DropDown
    Dim y As Integer
    Dim m As Integer
    Dim i As Integer

    Set sht = Worksheets("Stage")

    With sht
        Set YearCombo = .DropDowns("YearCombo")
        Set MonthCombo = .DropDowns("MonthCombo")
            .DropDowns.RemoveAllItems
    End With

    For y = 2000 To 2050
        YearCombo.AddItem y
    Next y

    With YearCombo
        For i = 1 To .ListCount
            If .List(i) = Val(Year(Date)) Then
                .Selected(i) = True
            End If
        Next i
    End With

    For m = 1 To 12
        MonthCombo.AddItem m
    Next m

    With MonthCombo
        For i = 1 To .ListCount
            If .List(i) = Val(Month(Date)) Then
                .Selected(i) = True
            End If
        Next i
    End With

   Call Combo_Change

End Sub

Step 3: Combo_Change 프로시저

그 다음에는 일반 모듈시트를 한 장 삽입하고 다음과 같은 코드를 작성합니다. 이 프로시저는 앞의 Workbook_Open 이벤트 프로시저에서도 호출되었고 Stage 시트에 있는 두 개의 콤보 박스(YearCombo, MonthCombo)에도 연결되어 있습니다.

Sub Combo_Change()

    Dim sht As Worksheet
    Dim YearCombo As DropDown
    Dim MonthCombo As DropDown
    Dim rngStart As Range
    Dim MyDate As Date
    Dim r As Integer
    Dim i As Integer
    Dim intDay As Integer
    Dim yNum As Integer, mNum As Integer

    Set sht = Worksheets("Stage")

    With sht
        Set YearCombo = .DropDowns("YearCombo")
        Set MonthCombo = .DropDowns("MonthCombo")
    End With

    yNum = Val(YearCombo.List(YearCombo.ListIndex))
    mNum = Val(MonthCombo.List(MonthCombo.ListIndex))

    Set rngStart = sht.Range("Start")
    rngStart.CurrentRegion.ClearContents

    MyDate = DateSerial(yNum, mNum + 1, 0)
    intDay = Day(MyDate)

    With rngStart
        For i = 1 To intDay
            MyDate = DateSerial(yNum, mNum, i)
            .Offset(0, r) = Format(MyDate, "d")
            .Offset(1, r) = WeekdayName(Weekday(MyDate), True)
            r = r + 1
       Next i
    End With

End Sub

여러분의 많은 관심과 참여를 기다립니다. ^^

다음에 또…

정리 — 간단 달력 코드 핵심

구분 사용한 코드 역할
콤보 상자 채우기 YearCombo.AddItem y 연도와 월 목록 추가
오늘 날짜 선택 .Selected(i) = True 현재 연도/월 항목 선택
말일 구하기 DateSerial(yNum, mNum + 1, 0) 해당 월의 마지막 날짜
날짜 표시 Format(MyDate, "d") 날짜를 일 단위로 표시
요일 표시 WeekdayName(Weekday(MyDate), True) 요일을 약칭으로 표시

자주 묻는 질문 (FAQ)

Q1. 월의 마지막 날짜는 어떻게 구하나요?

DateSerial 함수에 다음 달의 0일을 지정하면 이번 달의 마지막 날짜가 됩니다. 예를 들어 DateSerial(2026, 3, 0)은 2026년 2월 28일입니다.

Q2. 파일을 열 때 자동으로 실행되는 코드는 어디에 작성하나요?

VB Editor에서 ThisWorkbook 개체를 더블 클릭한 뒤 Workbook_Open 이벤트 프로시저에 작성합니다. 매크로를 사용하지 않도록 설정한 상태로 열면 실행되지 않습니다.

Q3. 콤보 상자에 연결된 프로시저는 어디에 작성하나요?

일반 모듈에 Sub 프로시저를 작성한 뒤 콤보 상자를 마우스 오른쪽 버튼으로 클릭하고 '매크로 지정'으로 연결합니다.

마치며

DateSerial과 WeekdayName만으로 간단한 달력을 만들 수 있습니다. 이 예제를 바탕으로 자신만의 달력을 만들어 보세요.