難易度:★☆☆(かんたん)
※当校のExcel VBAコースを補足する内容となっています。
カレンダーを作ろう
マクロを実行したときの「翌月のカレンダー」を作ってみましょう。
曜日は「中央揃え」、日にちは「左揃え」にします。
短いコードですむように、今回は次のような条件にしておきます。完成したあとでコードを追加してみるのもよいですね!
- フォントの大きさや色は設定しません。(日曜日と祝日は赤、土曜日は青など)
- 罫線は設定しません。
- 列の幅や行の高さの設定はしません。
たとえば2022年11月に実行すると、次のようなカレンダーができるようにしましょう。
1から31までの数字を順番に入れればいい?
毎月、曜日が変わるのはどうすればいいんだろう…
31日まである月もあれば、30日までの月もあるね。
「1から31までの数字」ではなく、「翌月1日から末日までの日付」を表示すると考えてみましょう。
また、Excelには、何月何日が何曜日かを求める「weekday」関数が用意されています。
第2引数を「vbSunday」と指定すると、曜日が1~7の数字で表されます。これをうまく使って、翌月1日が何曜日か、そしてどこのセルに表示するかを考えましょう。
Sub Calendar()
Dim i, j, w_Youbi As Long
Dim w_D As Date
Dim Sw As Boolean
Range("A1:G8") = ""
With Range("A1")
.Value = DateSerial(Year(Date), Month(Date) + 1, 1)
.NumberFormatLocal = "m月"
w_D = .Value
End With
For j = 1 To 7
Cells(2, j) = j
Next j
Range("A2:G2").NumberFormatLocal = "aaa"
w_Youbi = Weekday(w_D, vbSunday)
For j = w_Youbi To 7
Cells(3, j) = w_D
w_D = w_D + 1
Next j
For i = 4 To 8
For j = 1 To 7
If Month(Range("A1")) <> Month(w_D) Then
Sw = True
Exit For
End If
Cells(i, j) = w_D
w_D = w_D + 1
Next j
If Sw = True Then Exit For
Next i
Range("A3:G8").NumberFormatLocal = "d"
End Sub