●VBAを楽しむ日●

最終的には色を付けたりして、こんなカレンダーが作りたい時の考え方です。
表を観やすくするのは後でいろいろ調べたら出来るので、先ずはシンプルにプロシージャの記述をしてみたいと思います。
VBAはExcelがあれば誰でも出来ちゃうってのがいいですねぇ~。
Sub Calendar()
'シンプルにカレンダーを作成する
Dim i, j, Youbi As Long
Dim Sw As Boolean
Dim hiduke As Date
hiduke = InputBox("日付を入力して下さい(例:2025/4/1)", "Date")
Range("B2").Value = hiduke
※変数は後で迷わない様に数字の変数は一般的な「i」「j」を
その他はYoubi「曜日」hiduke「日付」Sw「Switch」みたいにしてます。
Boolean型は真偽を判別する時に使う変数の型です。
True or Falseを判断します。
InputBoxに欲しい年数の日付の初日を記入するとその月にカレンダーが作成されます。

Range("B5:H10") = ""
With Range("B2")
.Value = hiduke
.NumberFormatLocal = "m月"
hiduke = .Value
End With
For j = 1 To 7
Cells(5, j + 1) = j
Next j
Range("B5:H5").NumberFormatLocal = "aaa"
※B2にInputBoxに記述した日付を入力して〇月と書き込みます。
その記述をもとに先ずは曜日を入力します。
5行目の2列目 Cells(5, j + 1)に日曜日から順番に曜日を指定します。
PCは1900/1/1が最初の日曜日なので、5行目の2列目にはその日付が入力されます。
それをユーザー定義"aaa"で曜日に変更させる感じですね。
Youbi = Weekday(hiduke, vbSunday)
For j = Youbi To 7
Cells(6, j + 1) = hiduke
hiduke = hiduke + 1
Next j
※5行目に曜日を記入したら、次の6行目には数字を入れなくちゃなんです。
VBAでは1が日曜日、2が月曜日.....6が土曜日に割り当てられてます。
Weekday(日付,開始の曜日)みたいにWeekday関数を使います。
こうすると、その記述した月の何曜日スタートなのか判断して数字を記入してくれます。



For j = 1 To 7
If Month(Range("B2")) <> Month(hiduke) Then
Sw = True
Exit For
End If
Cells(i, j + 1) = hiduke
hiduke = hiduke + 1
Next j
If Sw = True Then Exit For
Next i
Range("B6:H10").NumberFormatLocal = "d"
End Sub
●カレンダー●
Sub Calendar()
'シンプルにカレンダーを作成する
Dim i, j, Youbi As Long
Dim Sw As Boolean
Dim hiduke As Date
hiduke = InputBox("日付を入力して下さい(例:2025/4/1)", "Date")
Range("B2").Value = hiduke
Range("B5:H10") = ""
With Range("B2")
.Value = hiduke
.NumberFormatLocal = "m月"
hiduke = .Value
End With
For j = 1 To 7
Cells(5, j + 1) = j
Next j
Range("B5:H5").NumberFormatLocal = "aaa"
Youbi = Weekday(hiduke, vbSunday)
For j = Youbi To 7
Cells(6, j + 1) = hiduke
hiduke = hiduke + 1
Next j
For i = 7 To 11
For j = 1 To 7
If Month(Range("B2")) <> Month(hiduke) Then
Sw = True
Exit For
End If
Cells(i, j + 1) = hiduke
hiduke = hiduke + 1
Next j
If Sw = True Then Exit For
Next i
Range("B6:H10").NumberFormatLocal = "d"
End Sub


Thank you!
心よりお待ち申し上げております。
