▶︎▶︎▶︎【昭和の普通のおうちスタジオ】のウェブサイトは https://showa-studio.jp/ に移動しました。ここをクリックするとジャンプします。

【Excel VBA】DateCalculatorClass を使ってカレンダーを作ってみる

Excel VBA
スポンサーリンク

先日アップした DateCalculatorClass を使ってカレンダーを作ってみる。

エクセルの関数を使って万年カレンダー的なものを作るのは結構ややこしい。特に月末の日付表示の部分で頭が混乱してくる。

DateCalculatorClass を使えば簡単にカレンダー形式の二次元配列を得られるため、かなり簡単にカレンダーが作れる。

サンプルコード

Public Sub CreateCal()
    
    Dim cal As DateCalculatorClass
    
    Set cal = New DateCalculatorClass
    
    ‘ 年月の設定
    Dim y As Integer, m As Integer
    
    y = 2018
    m = 9
    
    ‘ カレンダーデータの取得
    Dim dt As Date
    Dim cData
    
    dt = DateSerial(y, m, 1)
    cData = cal.GetCalendar(dt)
    
    ‘ 曜日を書き込み
    Dim i As Integer, j As Integer
    
    For j = 0 To UBound(cData, 2)
        Cells(3, j + 1) = cData(0, j)
    Next j
    
    ‘ 3行おきに日付と祝日名を書き込み
    Dim r As Integer, c As Integer
    Dim hol As Variant
    
    For i = 1 To UBound(cData, 1)
        ‘ 3行おきの設定
        r = (i – 1) * 3 + 4
        For j = 0 To UBound(cData, 2)
            c = j + 1
            With Cells(r, c)
                ‘ 日付のみを表示する
                .NumberFormatLocal = “d”
                .Value = cData(i, j)
            End With
    
            ‘ 祝日の取得と書き込み
            hol = cal.IsHoliday(CDate(cData(i, j)))
            If hol <> False Then
                Cells(r + 1, c) = hol
            End If
        Next j
    Next i
    
    Set cal = Nothing
    
End Sub

実行結果

あとはセルの表示や罫線などを整えると良い。

こんな感じで。

振替休日の表示はちょっとくどいので、コード上で

If hol like "*振替休日" Then
    hol = "振替休日"
End If

などと処理を入れたほうが良いかもしれない。

後の罫線の処理もマクロでやりたくなるところだけれど、万年カレンダーとして月ごとに書き換えていっても表示される枠は変わらないので、手作業でやってしまっていいと思う。

また、上記のコードをシートモジュールのワークシートチェンジイベントプロシージャで、月を入力したセルが変更されるタイミングで実行するようにしても良いかもしれない。

コメント

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