Access VBA 曜日を取得する方法 Weekday関数の活用

VBA

Accessで日付/時刻型のデータを取り扱うことは多々あるかと思います。この際に、当該日が何曜日かを知りたいといった場面には良く出くわすかと思います。

そこで今回は、曜日を取得する方法として、Weekday関数及びWeekdayName関数の活用方法を紹介します。

ここで、日付/時刻型データの取得方法については以下の記事をご参照ください。

スポンサーリンク

Weekday関数について

曜日を取得するための関数として、「Weekday関数」と「WeekdayName関数」が用意されています。

まずは、Weekday関数について基本構文を確認しましょう。

Weekday(date [, firstdayofweek])
date: 必須。 日付を表すことができるバリアント型、数値式、文字列式、またはこれらの組み合わせ。dateに Null が含まれる場合は、Nullが返される。
firstdayofweek: 省略可能。週の始まりの曜日を表す定数。 省略すると、vbSunday と見なされる。

ここで、firstofweek引数の設定及び戻り値は、表1及び表2をご参照ください。

表1 firstdayofweek引数

定数値(クエリで使うとき)説明
vbUseSystem0NLS API の設定を使う。
vbSunday1日曜日(既定)
vbMonday2月曜日
vbTuesday3火曜日
vbWednesday4水曜日
vbThursday5木曜日
vbFriday6金曜日
vbSaturdat7土曜日

表2 weekday関数の戻り値(firstdayofweek引数がvbSundayの場合)

定数説明
vbSunday1日曜日
vbMonday2月曜日
vbTuesday3火曜日
vbWednesday4水曜日
vbThursday5木曜日
vbFriday6金曜日
vbSaturdat7土曜日

このように、weekday関数では日付から該当する曜日の値を返しますが、firstdayofweek引数で戻り値を変えることもできます。

続いて、クエリでの使用方法について確認していきましょう。

Weekday関数をクエリで使う場合

Weekday関数の使用方法を確認するために、サンプルデータとして「T_Weekday」テーブルを作成し、日付/時刻型の「年月日」フィールドを作成します。

そして、表3に示す値を登録します。(2021/6/20が日曜日です。)

表3 サンプルデータ

年月日
2021/06/20
2021/06/21
2021/06/22
2021/06/23
2021/06/24
2021/06/25
2021/06/26

さて、サンプルデータが用意できましたら、続いて「Q_WeekDay」選択クエリを作成し、図1のように「T_Weekday」テーブルを対象とし、【フィールド】項目に「年月日」、「日曜起点: Weekday([年月日])」、「月曜起点: Weekday([年月日],2)」及び「土曜起点: Weekday([年月日],7)」フィールドを追加します。

図1 Weekday関数のクエリでの使用方法

クエリの設定ができましたら、データシートビューに切り替えます。図2のように、各曜日起点での値が返されていることが分かります。

図2 Weekday関数の結果

続いて、VBAでWeekday関数を使う場合を見ていきましょう。

Weekday関数をVBAで使う場合

標準モジュールを作成した後、以下のコードを追加してください。

Private Sub WeekDayFunction()

Debug.Print Weekday(#6/20/2021#, vbSunday)

End Sub

このコードの内容は、「2021年6月20日」に対してWeekday関数を用いて曜日に該当する値を取得し、これをDebug.Printによりイミディエイトウィンドウに表示するものです。

実際に動かしてみると、「1」が返されたと思います。

このように、クエリと違う点として、firstdayofweek引数には表1の定数を記載する必要がありますので、ご注意ください。

スポンサーリンク

WeekdayName関数について

ここまでは、Weekday関数について見てきました、戻り値が数値であるため、一目で曜日を把握することが難しいです。そこで、曜日を直接示す方法として、WeekdayName関数が用意されています。

WeekdayName関数の基本構文は、次のように表されます。

WeekdayName ( weekday [, abbreviate ] [, firstdayofweek ] )

WeekdayName関数の引数は表4に示すとおりです。

表4 WeekdayName関数の引数

引数説明
weekday必須。 曜日を指定する数値。 各曜日の数値は、firstdayofweek の設定によって決まる。
abbreviate省略可能。 曜日の名前を省略形にするかどうかを指定する Boolean 値。 省略した場合の既定値は False で、曜日の名前を省略しないことを意味する。
firstdayofweek省略可能。 週の最初の曜日を示す数値。 値については、表5にて説明。

表5 firstdayofweek引数

定数説明
vbUseSystem0各国語サポート (NLS) API の設定を使う。
vbSunday1日曜日
vbMonday2月曜日
vbTuesday3火曜日
vbWednesday4水曜日
vbThursday5木曜日
vbFriday6金曜日
vbSaturdat7土曜日

ここまでの説明では、WeekdayName関数の使い方が分かりにくいかと思いますので、具体的な方法を次から見ていきましょう。

WeekdayName関数をクエリで使う場合

先ほど作成した「Q_WeekDay」クエリを少し修正し、図3のようにします。具体的には、【フィールド】項目に「年月日」、「日曜起点: Weekday([年月日])」及び「曜日表示: WeekdayName(Weekday([年月日]),False)」フィールドとします。

ここで、WeekdayName関数のabbreviate引数を「False」にし、「○曜日」として表示させています。「True」にすると、例えば月曜日を「月」として表示させることになります。

図3 WeekdayName関数のクエリでの使用方法

クエリの設定ができましたら、データシートビューに切り替えます。図4のように、「曜日表示」フィールドに、「○曜日」として値が返されていることが分かります。

図4 WeekdayName関数の結果

続いて、VBAでWeekdayName関数を使う場合を見ていきましょう。

WeekdayName関数をVBAで使う場合

標準モジュールを作成した後、以下のコードを追加してください。

Private Sub WeekDayNameFunction()

Debug.Print WeekdayName(Weekday(#6/20/2021#, vbSunday), False)

End Sub

このコードの内容は、「2021年6月20日」に対してWeekday関数を用いて曜日に該当する値を取得し、さらに、WeekdayName関数を用いて「○曜日」表示に変換し、これをDebug.Printによりイミディエイトウィンドウに表示するものです。

実際に動かしてみると、「日曜日」が返されたと思います。

こちらについても、クエリと違う点として、firstdayofweek引数には表5の定数を記載する必要がありますので、ご注意ください。

まとめ

今回は、Accessで日付情報から曜日を取得する方法として、Weekday関数とWeekdayName関数を紹介しました。日付情報を扱う上で曜日を知りたいといったニーズは多々あると思いますので、ここで紹介した方法を上手く活用していただければと思います。

これら関数については、以下の書籍でも紹介されていますので、ご参考になさってください。

Amazon.co.jp
Amazon.co.jp
https://amzn.to/3vPewxk

コメント

タイトルとURLをコピーしました