Sub TEST2()
Dim A
A = CDate("2022/4/1") '「1日」を取得'月曜始まりで、1週目の週初めの日付
Debug.Print A - Weekday(A, vbMonday) + 1
End Sub
実行してみます。
「月曜」始まりで「1週目」の週初めの日付を取得できた
カレンダーで確認してみます。
カレンダーで確認
「月曜」始まりで、1週目の週初めは、「3/28」ですので、正しく日付を取得できています。
指定した週の週初めの日付を取得
次は、「指定した週」の週初めの日付を取得してみます。
2週目や3週目の週初めの日付を取得する、という感じです。
例として「3週目」でやってみます。
「日曜」始まりで「3週目」の週初めの日付を取得
「日曜」始まりで「3週目」の「週初め」の日付を取得してみます。
「3週目」なので、「15日」がある週の「週初め」の日付を取得します。
Sub TEST3()
Dim A
'「3週目」の日付を取得
A = CDate("2022/4/1") + 7 * 2
'「日曜」始まりで、「3週目」の週初めの日付
Debug.Print A - Weekday(A) + 1
End Sub
実行してみます。
「日曜」始まりで、3週目の週初めの日付を取得できた
カレンダーで確認してみます。
カレンダーで確認
「日曜」始まりで、3周目の週初めは、「4/10」ですので、正しく日付を取得できています。
「月曜」始まりで「3週目」の週初めの日付を取得
次は「月曜」始まりで「3週目」の「週初め」の日付を取得してみます。
「月曜」始まりで取得したい場合は、「Weekday」に「vbMonday」を入力します。
「3週目」なので、「15日」がある週の「週初め」の日付を取得します。
Sub TEST4()
Dim A
'「3週目」の日付を取得
A = CDate("2022/4/1") + 7 * 2
'「月曜」始まりで、「3週目」の週初めの日付
Debug.Print A - Weekday(A, vbMonday) + 1
End Sub
実行してみます。
「月曜」始まりで、3週目の週初めの日付を取得できた
カレンダーで確認してみます。
カレンダーで確認
「月曜」始まりで、3周目の週初めは、「4/11」ですので、正しく日付を取得できています。
週間のカレンダーを作成
週初めの日付を取得できれば、「週間のカレンダー」を作成することができます。
指定した週の1週間の日付を入力
指定した週の1週間の日付を入力してみます。
Sub MakeCal()
Dim A
A = Array("日", "月", "火", "水", "木", "金", "土")
Range("A5").Resize(, 7) = A '曜日をセルに入力
Dim B
'指定した「年」「月」「週」の日付を取得
B = DateSerial(Range("A2"), Range("A3"), 1) + 7 * (Range("A4") - 1)
Range("A6") = B - Weekday(B) + 1 '日曜始まりで、週初めの日付
Range("B6").Resize(, 6) = "=A6+1" '月~土の日付を入力
Range("B6").Resize(, 6).Value = Range("A6").Resize(, 7).Value '値に変換
End Sub
最初に、セルに年と月、週を入力しておきます。
セルに年と月、週を入力しておく
では、VBAコードを実行してみます。
VBAコードを実行
まず、「日~土」の曜日が入力されます。
「日曜」始まりで、4月第1週目の「週初め」の日付が入力されます。
月曜から土曜に、日付を1日ずつ足して、1週間分の日付を入力します。
「.Value」に「.Value」を入力して、数式を値に変換します。
これで、2022年4月第1週目の日付を入力できます。
2022年4月第1週目の日付を入力できた
2022年4月第1週目の日付を入力できました。
あとは、書式を設定していきます。
書式を設定
表示形式や罫線、塗りつぶしの書式を設定していきます。
Sub SetFormat()
'表示形式を「"m/d"」にする
Range("A6").Resize(, 7).NumberFormatLocal = "m/d"
'罫線を引く
Range("A5").Resize(2, 7).Borders.LineStyle = xlContinuous
'日曜日の背景色
Range("A5").Resize(2).Interior.Color = RGB(252, 224, 218)
'土曜日の背景色
Range("G5").Resize(2).Interior.Color = RGB(221, 235, 247)
End Sub
では、実行してみます。
書式を設定していく
日付を「"m/d"」形式に設定します。
罫線を引きます。
日曜日を塗りつぶしします。
土曜日を塗りつぶしします。
これで、2022年4月第1週目のカレンダーが完成します。
2022年4月第1週目のカレンダーが完成
2022年4月第1週目のカレンダーが完成しました。
こんな感じで、「Weekday」を使えば1週間のカレンダーを作成することができます。
「次週」や「先週」、「今週」を取得
「次週」や「先週」、「今週」を取得できると便利です。
次週を取得
「次週」を取得するVBAコードです。
手順としては、
週を「+1」する
年と月と週を更新する
という感じです。
Sub NextWeek()
'1週進める
Range("A4") = Range("A4") + 1
Dim A
A = Range("G6") '土曜日の日付を取得
Dim B, C
B = Year(A) '年
C = Month(A) '月'年、月、週を更新
Range("A2") = B '年
Range("A3") = C '月
Range("A4") = DateDiff("ww", DateSerial(B, C, 1), A) + 1 '週
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'変更セルが「A2:A4」の場合
If Not Intersect(Target, Range("A2:A4")) Is Nothing Then
Call MakeCal '週のカレンダーを作成
Call SetFormat '書式を設定
End If
End Sub
「MakeCal」と「SetFormat」は先ほど説明したVBAコードになります。
では、実行して次週を表示してみます。
次週の2022年4月2週目を表示できます。
次週の2022年4月2週目を表示できました。
先週を取得
「先週」を取得するVBAコードです。
手順としては、
週を「-1」する
年と月と週を更新する
という感じです。
Sub PreWeek()
'1週戻す
Range("A4") = Range("A4") - 1
Dim A
A = Range("G6") '土曜日の日付を取得
Dim B, C
B = Year(A) '年
C = Month(A) '月'年、月、週を更新
Range("A2") = B '年
Range("A3") = C '月
Range("A4") = DateDiff("ww", DateSerial(B, C, 1), A) + 1 '週
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'変更セルが「A2:A4」の場合
If Not Intersect(Target, Range("A2:A4")) Is Nothing Then
Call MakeCal '週のカレンダーを作成
Call SetFormat '書式を設定
End If
End Sub
「MakeCal」と「SetFormat」は先ほど説明したVBAコードになります。
では実行して、先週を表示してみます。
先週の2022年3月4週目を表示できます。
先週の2022年3月4週目を表示できました。
今週を取得
次は、今週を取得してみます。
手順としては、
「Date」で今日の日付を取得
年と月と週を入力
という感じです。
Sub ThisWeek()
Dim A, B
A = Date '今日の日付
B = DateSerial(Year(A), Month(A), 1) '「1日」の日付
Range("A2") = Year(A) '年
Range("A3") = Month(A) '月
Range("A4") = DateDiff("ww", B, A) + 1 '週
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'変更セルが「A2:A4」の場合
If Not Intersect(Target, Range("A2:A4")) Is Nothing Then
Call MakeCal '週のカレンダーを作成
Call SetFormat '書式を設定
End If
End Sub
では実行して、今週を表示してみます。
記載した日は「2022/5/2」なので、2022年5月の1週目を表示できます。
今週の2022年5月1週目を表示できました。
「次週」や「先週」、「今週」を表示するVBAコードは、ボタンを追加すると便利なります。
「次週」や「先週」、「今週」のボタンを付ける
先ほどと紹介した「次週」や「先週」、「今週」のVBAコードを、ボタンに登録してみます。
次週、先週、今週のボタンを追加
次週、先週、今週のボタンを追加します。
次週、先週、今週のボタンにそれぞれ、次のVBAコードを登録します。
Sub NextWeek()
'1週進める
Range("A4") = Range("A4") + 1
Dim A
A = Range("G6") '土曜日の日付を取得
Dim B, C
B = Year(A) '年
C = Month(A) '月'年、月、週を更新
Range("A2") = B '年
Range("A3") = C '月
Range("A4") = DateDiff("ww", DateSerial(B, C, 1), A) + 1 '週
End Sub
Sub PreWeek()
'1週戻す
Range("A4") = Range("A4") - 1
Dim A
A = Range("G6") '土曜日の日付を取得
Dim B, C
B = Year(A) '年
C = Month(A) '月'年、月、週を更新
Range("A2") = B '年
Range("A3") = C '月
Range("A4") = DateDiff("ww", DateSerial(B, C, 1), A) + 1 '週
End Sub
Sub ThisWeek()
Dim A, B
A = Date '今日の日付
B = DateSerial(Year(Date), Month(Date), 1) '「1日」の日付
Range("A2") = Year(A) '年
Range("A3") = Month(A) '月
Range("A4") = DateDiff("ww", B, A) + 1 '週
End Sub