#718 次の〇曜日の日付を取得するには? VBA

指定された日付に対して、次の日曜日や次の水曜日といった日付を求めたいときに使えるサンプルプロシージャです。

Public Function GetNextWeekOfDay(dtmDate As Date, intWOD As Integer) As Date
'指定された日付dtmDateに対して、次のintWOD曜日の日付を返す

  Dim intDiffDay As Integer

  '引数の指定日付の曜日と引数の曜日の番号の差を求める
  intDiffDay = intWOD - Weekday(dtmDate)
  'それがゼロ以下なら+7する
  If intDiffDay <= 0 Then
    intDiffDay = intDiffDay + 7
  End If

  '差を指定日付に加算した日付を返す
  GetNextWeekOfDay = DateAdd("d", dtmDate, intDiffDay)

End Function

※日数の加算の場合、「GetNextWeekOfDay = dtmDate + intDiffDay」といった書き方でも可です。


ここではまず「指定された日付の”曜日の番号”」を取得します。

そして、その数値と「求めたい”曜日の番号”」との差を求め、その差分を指定日付に足します。

ここでポイントとなるのが、「曜日の番号」です。VBAには『Weekday』という関数があり、これを使うことで指定日付の曜日の番号を取得することができます。そしてその番号は次のように決まっています。

1 2 3 4 5 6 7

単純なケースでは、指定日付が水曜日で次の土曜日を求めたい場合、前者は「4」、後者は「7」ですので、差は「3」となり、指定日付が「2022/01/12」とするとそれに「3」を足した「2022/01/15」が次の土曜となります。

しかし、翌週にまたぐケースでは考慮が必要です。指定日付が水曜日で、次の月曜日を求めたい場合、前者は「4」、後者は「2」ですので、差は「ー2」となり、「2022/01/12」に「ー2」を足すと「2022/01/10」になってしまいます。
そこで、『差がゼロ以下だったらそれに7を足した数値』(同じ曜日なら翌週の日付を答えとする場合)を指定日付に足すという条件分岐が必要となります。


利用例:
クエリの演算フィールドで上記プロシージャを呼び出す例です。
テーブルにはあらかじめ「日付」とその「曜日」が保存されているものとします。そしてこのクエリで「次の水曜日」と「次の日曜日」を求めていっしょに出力します。


2つの演算フィードには次のような式を設定します。

*次の水曜日:GetNextWeekOfDay([日付], 4)

*次の日曜日:GetNextWeekOfDay([日付], 1)

※上記2つのフィールドには「書式」プロパティとして「yyyy/mm/dd(aaa)」を指定してあるものとします。

このクエリのデータシートビューを開くと次のようになります。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved