難易度:★☆☆(かんたん)

※当校のExcel VBAコースを補足する内容となっています。


カレンダーを作ろう

マクロを実行したときの「翌月のカレンダー」を作ってみましょう。
曜日は「中央揃え」、日にちは「左揃え」にします。

短いコードですむように、今回は次のような条件にしておきます。完成したあとでコードを追加してみるのもよいですね!

  • フォントの大きさや色は設定しません。(日曜日と祝日は赤、土曜日は青など)
  • 罫線は設定しません。
  • 列の幅や行の高さの設定はしません。

たとえば2022年11月に実行すると、次のようなカレンダーができるようにしましょう。

2022年12月カレンダー

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