Access

【VBA】指定日付が含まれる週の月曜日~土曜日を取得

週の始めと終わり
記事内に商品プロモーションを含む場合があります

今回は指定日付の週の月曜日を求めます。

現在日までの今週の売上などを集計したい場合に使えます。

使用する関数

使う関数は、Weekday()です。

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)

指定日から曜日を引くと月曜日の日付が取得できます。

例)指定日が2018/08/30(木)の場合

[指定日]-weekday([指定日],3)

2018/8/30 – weekday(2018/8/30, 3) = 2018/8/27 となります。

解説:指定日から取得した曜日を引くと月曜日の日付になります。

1週間分の売上を求める場合などは、取得した週始めの日付と取得した週始めの日付に6を加算した日付範囲を条件にデータ集計をすると求められます。

VBAの関数で処理する場合

関数を作りました。

getweekday()の関数仕様

概要:指定日を含む週の月曜日と土曜日を取得します
引数:指定日、月曜日取得変数、土曜日取得変数
戻り値: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″]

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。