大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、指定した週の週初めの日付を取得したい場合は、「Weekday」が使えます。1週目の週初めの日付を取得する場合は、「1日」から曜日の数値を引いて、「+1」すると取得できます。3週目の場合は、「15日」から曜日の数値を引いて、「+1」するという感じです。日付の操作についてマスターしていきましょう。

はじめに

この記事では、指定した週の、「週初め」の日付を取得する方法について、ご紹介します。

週初めの日付を取得したい場合は、「Weekday」が使えます。

1週目の週初めの日付の場合は、「1日」の日付から曜日の数値を引いて、「+1」するとできます。

3週目の週初めの日付の場合は、「15日」の日付から曜日の数値を引いて、「+1」するという感じです。

日付の操作について、マスターしていきましょう。

では、指定した週の、「週初め」の日付を取得する方法について、解説していきます。

この記事を読むメリット

  • 指定した週の週初めの日付を取得することができます。

目次から見たい項目へ移動すると便利ですよ。

目次

1週目の週初めの日付を取得

1週目の「週初め」の日付を取得してみます。

「日曜」始まりと「土曜」始まりのそれぞれで、取得してみます。

「日曜」始まりで「1週目」の週初めの日付

まずは、「日曜」始まりで「1週目」の「週初め」の日付を取得してみます。

VBAコードは、こんな感じになります。

Sub TEST1()
  
  Dim A
  A = CDate("2022/4/1") '「1日」を取得
  '日曜始まりで、1週目の週初めの日付
  Debug.Print A - Weekday(A) + 1
  
End Sub

実行してみます。

「日曜」始まりで、「1週目」の週初めの日付を取得できた

「日曜」始まりで、1週目の週初めの日付を取得できました

カレンダーで日付を確認してみます。

カレンダーで確認

「日曜」始まりで、1週目の週初めは、「3/27」です

「日曜」始まりで、1週目の週初めは、「3/27」ですので、正しく日付を取得できています。

週初めの日付を取得する手順は、次のような感じになります。

週初めの日付を取得する手順

まず、「4/1」から曜日の数値である「6」を差し引きます。

1日から曜日の数値を引いてみる

すると取得する日付は「3/26」になりますので、「1日」を足します。

1日足します

こんな感じで、週初めの日付を取得することができます。

週初めの日付を取得できます

日曜始まりで、1週目の週初めの日付は「3/27」になる、という感じです。

月曜始まりでも同じ方法で、週初めの日付を取得できます。

「月曜」始まりで「1週目」の週初めの日付

次は、「月曜」始まりで「1週目」の「週初め」の日付を取得してみます。

月曜始まりで「週初め」を取得したい場合は、「Weekday」の引数に「vbMonday」を入力します。

Sub TEST2()
  
  Dim A
  A = CDate("2022/4/1") '「1日」を取得
  '月曜始まりで、1週目の週初めの日付
  Debug.Print A - Weekday(A, vbMonday) + 1
  
End Sub

実行してみます。

「月曜」始まりで「1週目」の週初めの日付を取得できた

「月曜」始まりで、1週目の週初めの日付を取得できました

カレンダーで確認してみます。

カレンダーで確認

「月曜」始まりで、1週目の週初めは、「3/28」です

「月曜」始まりで、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週目の週初めの日付を取得できました

カレンダーで確認してみます。

カレンダーで確認

「日曜」始まりで、3周目の週初めは、「4/10」です

「日曜」始まりで、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週目の週初めの日付を取得できました

カレンダーで確認してみます。

カレンダーで確認

「月曜」始まりで、3周目の週初めは、「4/11」です

「月曜」始まりで、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週目の「週初め」の日付が入力されます。

「日曜」始まりで、4月第1週目の週初めの日付が入力されます

月曜から土曜に、日付を1日ずつ足して、1週間分の日付を入力します。

月曜から土曜に、日付を1日ずつ足していきます

「.Value」に「.Value」を入力して、数式を値に変換します。

数式を値に変換します

これで、2022年4月第1週目の日付を入力できます。

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週目のカレンダーが完成しました

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

「何週目か」を取得するには「DateDiff」を使うとできます。

値が変更された場合に実行する「Changeイベント」を使って、カレンダーを更新します。

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週目を表示できました

次週の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

「何週目か」を取得するには「DateDiff」を使うとできます。

値が変更された場合に実行する「Changeイベント」を使って、カレンダーを更新します。

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週目を表示できました

先週の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

「何週目か」を取得するには「DateDiff」を使うとできます。

値が変更された場合に実行する「Changeイベント」を使って、カレンダーを更新します。

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週目を表示できました

今週の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

では、ボタンをクリックして実行してみます。

次週をクリック

次週をクリックしてみます。

次週をクリックしてみます

次週の2022年4月2週目を表示できます。

次週の2022年4月2週目を表示できました

次週の2022年4月2週目を表示できました。

先週をクリック

次は、先週をクリックしてみます。

先週をクリックしてみます

先週の2022年3月4週目を表示できます。

先週の2022年3月4週目を表示できました

先週の2022年3月4週目を表示できました。

今週をクリック

最後に、今週をクリックしてみます。

今週をクリックしてみます

本日の日付の「2022/5/2」の週である、2022年5月1週目を表示できます。

今週の2022年5月1週目を表示できました

今週の2022年5月1週目を表示できました。

という感じで、週間のカレンダーを作成して、次週や先週、今週に更新することができます。

おわりに

この記事では、指定した週の、「週初め」の日付を取得する方法について、ご紹介しました。

週初めの日付を取得したい場合は、「Weekday」が使えます。

1週目の週初めの日付の場合は、「1日」の日付から曜日の数値を引いて、「+1」するとできます。

3週目の週初めの日付の場合は、「15日」の日付から曜日の数値を引いて、「+1」するという感じです。

日付の操作について、マスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す