Step3で作成した、祝日取得・セル位置計算・月の末日取得のプロシージャを使用し、カレンダーに1日からその月の末日までの日付をセットしていきます。
日曜と土曜のフォント色は前回設定済みなので、祭日のみチェックし祭日なら赤色で設定します。
シートのVBAコード
下記のコードを変更してください
・その月の1日の曜日から、セル位置計算プロシージャで開始セルを取得します。
・Forループで、1からその月の末日までループし日付をセットしていきます。
・祭日かどうかチェックし、祭日の場合Font.Color=vbRedで赤色で表示します。
・列が7列目(土曜日)の場合、先頭列(日曜日)に戻しています。
'カレンダーを作成
Private Sub ExCalenSetSub(mm As Integer)
Dim i As Integer
Dim nlast As Integer
Dim nc As Long
Dim scell As String
Dim startcell As String
Dim s As String
Dim tdate As Date
startcell = Range("C5")
scell = startcell
tdate = Format(Range("C6") & "/" & mm & "/1", "yyyy/mm/dd")
nlast = MonthLastDay(Range("C6"), mm)
Sheets(mm & "月").Select
Sheets(mm & "月").Activate
'月のセット
ActiveSheet.Range(scell).Offset(0, 3) = mm & "月"
'中央に表示
ActiveSheet.Range(scell).Offset(0, 3).HorizontalAlignment = xlHAlignCenter
scell = Range("C5")
Sheets(mm & "月").Select
Sheets(mm & "月").Activate
For i = 1 To 7
Select Case i
Case 1: s = "日"
Case 2: s = "月"
Case 3: s = "火"
Case 4: s = "水"
Case 5: s = "木"
Case 6: s = "金"
Case 7: s = "土"
End Select
'曜日をセット
ActiveSheet.Range(scell).Offset(1, i - 1) = s
'中央に表示
ActiveSheet.Range(scell).Offset(1, i - 1).HorizontalAlignment = xlHAlignCenter
Next
'日曜日の色
ActiveSheet.Range(ActiveSheet.Range(scell), _
ActiveSheet.Range(scell).Offset(7, 0)).Font.Color = vbRed
'土曜日の色
ActiveSheet.Range(ActiveSheet.Range(scell).Offset(0, 6), _
ActiveSheet.Range(scell).Offset(7, 6)).Font.Color = vbBlue
'開始の曜日
nc = Weekday(tdate) - 1
'開始のセル位置
scell = A1Add(scell, 2, nc)
For i = 1 To nlast
'祭日のチェック
If GetSaijituName(tdate) <> "" Then
ActiveSheet.Range(scell).Font.Color = vbRed
End If
tdate = tdate + 1
'日付のセット
ActiveSheet.Range(scell) = i
nc = nc + 1
If nc = 7 Then
nc = 0
scell = A1Add(scell, 1, -6)
Else
scell = A1Add(scell, 0, 1)
End If
Next
End Sub
実行結果
12月1日が土曜から開始し、24が祭日の為赤色表示になっています。