今回は指定日付の週の月曜日を求めます。
現在日までの今週の売上などを集計したい場合に使えます。
使用する関数
使う関数は、Weekday()です。
Weekday()関数の仕様は以下の通りです。
概要:日付に対応する曜日を返します。
引数:指定日、(週の基準)
戻り値:既定では1 (日曜) から 7 (土曜) までの範囲の整数
引き数として指定した「週の基準」による各曜日の戻り値は以下のとおりです。
週の基準 | |||
曜日 | 1または指定なし | 2 | 3 |
日曜日 | 1 | 7 | 6 |
月曜日 | 2 | 1 | 0 |
火曜日 | 3 | 2 | 1 |
水曜日 | 4 | 3 | 2 |
木曜日 | 5 | 4 | 3 |
金曜日 | 6 | 5 | 4 |
土曜日 | 7 | 6 | 5 |
※その他の「週の基準」もありますが代表的なもののみ掲載しています。
指定日付が含まれる週の月曜日~土曜日を取得する手順
まずは、指定日の曜日を求めます。週の基準を月曜日(0)スタートにした方がわかりやすいので、今回は週の基準を3にします。
weekday(指定日, 3)
指定日から曜日を引くと月曜日の日付が取得できます。
[指定日]-weekday([指定日],3)
2018/8/30 – weekday(2018/8/30, 3) = 2018/8/27 となります。
解説:指定日から取得した曜日を引くと月曜日の日付になります。
1週間分の売上を求める場合などは、取得した週始めの日付と取得した週始めの日付に6を加算した日付範囲を条件にデータ集計をすると求められます。
VBAの関数で処理する場合
関数を作りました。
概要:指定日を含む週の月曜日と土曜日を取得します
引数:指定日、月曜日取得変数、土曜日取得変数
戻り値:True/False
'------------------------------------------------------------ ' 処理内容:指定日が含まれる週の月曜日・土曜日の日付を求める ' 引数:指定日/月曜日(Ref)/土曜日(Ref) ' 戻り値:True,False ' 更新: '------------------------------------------------------------ Private Function getWeekday(指定日 As Date, ByRef wk月曜日 As Date, ByRef wk土曜日 As Date) As Boolean '戻り値初期化 getWeekday = False '指定日がNullならエラー If IsNull(指定日) Then MsgBox "日付が指定されていません。", vbOKOnly + vbCritical, "Error" Exit Function End If wk月曜日 = 指定日 - Weekday(指定日, 3) wk土曜日 = wk月曜日 + 5 '正常終了 getWeekday = True End Function
クエリーで処理する場合
これは、売上日が今週の月曜日から今日までのデータを抽出するための条件指定です。
先の関数と同じように指定日の月曜日から土曜日を指定する場合は以下のようになります。
Between [指定日]-weekday([指定日],3) and [指定日]-weekday([指定日],3)+5
\逆引き辞書があると便利です/
[itemlink post_id=”1386″]