Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【第3回】Excelマクロで1年分のカレンダーを一括作成!祝日にも対応した自動生成マクロ

【第3回】Excelマクロで1年分のカレンダーを一括作成!祝日にも対応した自動生成マクロ

前回は、指定した月の祝日付きカレンダーをマクロで自動生成する方法をご紹介しました。今回はさらに進んで、1年分の複数月カレンダーを一括で生成できるマクロをご紹介します!


🎯 今回のポイント

  • 1年分(または指定範囲)のカレンダーを自動作成

  • 各月ごとに見やすく整列(3列×4行など)

  • 土日・祝日も色付きで表示!

  • 印刷用のデザインにも対応可能


🧾 事前準備

  1. A1セルに作成したい「年」を入力(例:2025)

  2. 別シート「祝日」に祝日データを用意(前回と同じ形式)

祝日シートの例(祝日):

日付 名称
2025/01/01 元日
2025/01/13 成人の日

💻 マクロコード全文(12か月一括生成)

以下のマクロを貼り付けて実行するだけでOK!

 
  
Sub 年間カレンダー作成()

    Dim year As Integer
    Dim month As Integer
    Dim firstDay As Date
    Dim lastDay As Integer
    Dim dayCounter As Integer
    Dim col As Integer, row As Integer
    Dim mCol As Integer, mRow As Integer
    Dim startCell As Range
    Dim ws As Worksheet
    Dim holidaySheet As Worksheet
    Dim rng As Range, cell As Range
    Dim i As Integer

    ' シート準備
    Set ws = Worksheets("Sheet1")
    Set holidaySheet = Worksheets("祝日")
    'ws.Cells.Clear
    Range("A2:AA40").Clear

    ' 年を取得(A1セル)
    year = ws.Range("A1").Value

    ' 祝日データの取得
    Set rng = holidaySheet.Range("A2", holidaySheet.Cells(Rows.Count, "A").End(xlUp))

    ' 曜日配列
    Dim weekDayList As Variant
    weekDayList = Array("日", "月", "火", "水", "木", "金", "土")

    ' 月ループ(1~12月)
    For month = 1 To 12
        ' 月ごとの開始セル位置(3列 × 4行レイアウト)
        mCol = ((month - 1) Mod 3) * 10 + 1     ' 各月の横方向オフセット
        mRow = Int((month - 1) / 3) * 10 + 2    ' 各月の縦方向オフセット
        Set startCell = ws.Cells(mRow, mCol)

        ' ヘッダー(月)
        startCell.Value = month & "月"
        startCell.Font.Bold = True
        startCell.Font.Size = 14

        ' 曜日表示
        For i = 0 To 6
            startCell.Offset(1, i).Value = weekDayList(i)
            startCell.Offset(1, i).Font.Bold = True
        Next i

        ' 月の開始日と終了日
        firstDay = DateSerial(year, month, 1)
        lastDay = Day(DateSerial(year, month + 1, 0))

        ' 曜日の開始位置
        col = Weekday(firstDay)
        row = 2
        dayCounter = 1
        Do While dayCounter <= lastDay
            With startCell.Offset(row, col - 1)
                .Value = dayCounter

                ' 土曜・日曜色付け
                If col = 1 Then
                    .Interior.Color = RGB(255, 200, 200) ' 日曜
                ElseIf col = 7 Then
                    .Interior.Color = RGB(200, 200, 255) ' 土曜
                End If

                ' 祝日判定
                For Each cell In rng
                    If cell.Value = DateSerial(year, month, dayCounter) Then
                        .Interior.Color = RGB(255, 150, 150)
                        .AddComment cell.Offset(0, 1).Value ' 祝日名をコメントで表示
                    End If
                Next cell
            End With
            col = col + 1
            If col > 7 Then
                col = 1
                row = row + 1
            End If
            dayCounter = dayCounter + 1
        Loop
    Next month

    MsgBox "1年分のカレンダーを作成しました!"

End Sub
 
 

✅ 実行手順

  1. Excelの Sheet1A1セルに西暦(例:2025)を入力

  2. マクロを開いて「年間カレンダー作成」を実行!

 

カレンダー例

カレンダー例

 


✨ 便利ポイント

  • 印刷用にも最適な整列レイアウト

  • 祝日はコメント表示でスッキリ

  • 自由に列幅・フォントサイズを調整可能


🔧 カスタマイズ案

  • コメントではなく祝日名を小さく下段に表示

  • 月ごとに別シートに分けて作成する

  • 月の見出しに西暦も含める(例:「2025年1月」)


📌 まとめ

Excelマクロを使えば、1年分のカレンダーをたった1クリックで自動作成できます。
祝日対応もできるので、予定表やチームスケジュールにも便利!

毎年繰り返し使えるので、業務効率もアップ間違いなしです!