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


Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/take1mg/www/plus1/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

先日アップした 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

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

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

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

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿、および宣伝に類する投稿は無視されますのでご注意ください。(スパム対策)