【Excel VBA】定例作業スケジュール作成ツール改良

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

ふだん仕事の中で、作業日程をもう少し細かく設定したくなったので、以前作成したカレンダー作成ツールを再改造しました。

■ 改造点と主な機能

  • 休日の色を外部から自由に変更できるように改善しました。
  • 週・月・年単位を選択してカレンダーを生成できるようにしました。
  • 内部処理をVBAのクラスモジュールで設計し、オブジェクト指向による構造化を行いました。

■ 想定環境・前提条件

  • Microsoft Excel (デスクトップ版)
  • マクロ(VBA)の実行が有効な環境

■ カレンダー作成ツールの再構成サンプルコード

元となった配布ファイルが現在入手できないため、記事の仕様に基づきクラスモジュールを活用したカレンダー作成の再構成サンプルコードを以下に示します。

1. クラスモジュール: CalendarGenerator.cls

' クラスモジュール名: CalendarGenerator
Option Explicit

Private wsTarget As Worksheet
Private holidayColor As Long

Public Property Set TargetSheet(ByVal ws As Worksheet)
    Set wsTarget = ws
End Property

Public Property Let HolidayColorCode(ByVal cColor As Long)
    holidayColor = cColor
End Property

' カレンダー生成処理のメインメソッド
Public Sub CreateCalendar(ByVal targetYear As Integer, ByVal targetMonth As Integer, ByVal mode As String)
    If wsTarget Is Nothing Then
        MsgBox "出力先シートが設定されていません。", vbCritical
        Exit Sub
    End If
    
    wsTarget.Cells.Clear
    
    Select Case UCase(mode)
        Case "MONTH"
            GenerateMonthlyCalendar targetYear, targetMonth
        Case Else
            MsgBox "サポートされていないモードです: " & mode, vbExclamation
    End Select
End Sub

Private Sub GenerateMonthlyCalendar(ByVal y As Integer, ByVal m As Integer)
    Dim startDate As Date
    Dim lastDay As Date
    Dim i As Long
    
    startDate = DateSerial(y, m, 1)
    lastDay = DateSerial(y, m + 1, 0)
    
    wsTarget.Cells(1, 1).Value = y & "年 " & m & "月 スケジュール"
    wsTarget.Cells(3, 1).Value = "日付"
    wsTarget.Cells(3, 2).Value = "曜日"
    wsTarget.Cells(3, 3).Value = "作業内容"
    
    For i = 0 To (Day(lastDay) - 1)
        Dim currentDate As Date
        currentDate = DateAdd("d", i, startDate)
        
        wsTarget.Cells(4 + i, 1).Value = Format(currentDate, "yyyy/mm/dd")
        wsTarget.Cells(4 + i, 2).Value = Format(currentDate, "aaa")
        
        ' 土日判定と休日カラー適用例
        If Weekday(currentDate, vbSunday) = vbSaturday Or Weekday(currentDate, vbSunday) = vbSunday Then
            wsTarget.Cells(4 + i, 2).Interior.Color = holidayColor
        End If
    Next i
    
    wsTarget.Columns("A:C").AutoFit
End Sub

2. 標準モジュール: MainModule.bas

' 標準モジュール
Option Explicit

Public Sub RunCalendarCreation()
    Dim calGen As CalendarGenerator
    Set calGen = New CalendarGenerator
    
    ' 出力先シートを指定
    Set calGen.TargetSheet = ActiveSheet
    
    ' 休日カラーに薄い赤色を指定 (&H8080FF& または RGB)
    calGen.HolidayColorCode = RGB(230, 230, 250)
    
    ' 2026年10月の月間カレンダーを生成
    calGen.CreateCalendar 2026, 10, "MONTH"
    
    MsgBox "カレンダーの生成が完了しました。", vbInformation
End Sub

■ 実行手順

  1. Excelを開き、Alt + F11 キーを押してVBE(Visual Basic Editor)を起動します。
  2. メニューの [挿入] から [クラス モジュール] を選択し、プロパティウィンドウで名前を CalendarGenerator に変更します。
  3. 上記のクラスモジュール用コードを貼り付けます。
  4. 同様に [挿入] から [標準モジュール] を追加し、標準モジュール用コードを貼り付けます。
  5. Excelシートに戻り、マクロ RunCalendarCreation を実行して動作を確認します。

■ セキュリティ・制約事項

  • マクロを含むため、保存時は .xlsm (マクロ有効ブック) 形式を使用してください。
  • 実際の運用に合わせてシート構成やエラーハンドリング(On Error 等)を追加してご利用ください。

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月30日

  • 削除リンク切れとなっている古い外部ZIPファイルのダウンロードリンクを削除しました。
  • 追加クラスモジュールを用いたExcel VBAによるカレンダー・スケジュール作成の再構成サンプルコードと実行手順を追加しました。

文書情報

記事タイトル
【Excel VBA】定例作業スケジュール作成ツール改良
作成日
更新日
Source URL
https://papanda925.com/?p=416

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました