特定の日付の曜日を取得する場合、VBAでは日付関数 Weekday と、WeekdayNameを組み合わせて行ないます。
特定の日付の曜日を示す整数値を求めるWeekday関数
Weekday関数は、関数の構文は以下の通りです。
1 |
Weekday(日付, 週の第1日目の曜日を示す値またはクラス名) |
日付は調べたい日付(「2016/1/1」のような日付を示す文字列も可能)を記入します。「月の最初の曜日を示す値」は省略可能です。省略した場合、VBAではPCのOSのシステム時間がデフォルトとして設定されます。
マクロ例:
1 2 3 4 5 |
Sub Weekday_sample_01() '文字列で代入 MsgBox "2016/1/1の曜日の整数値は" & vbCrLf & Weekday("2016/1/1") End Sub |
1 2 3 4 5 |
Sub Weekday_sample_02() '数値(シリアル値)を求めて代入 MsgBox "2016/1/1の曜日の整数値は" & vbCrLf & Weekday(DateSerial(2016, 1, 1)) End Sub |
どちらのコードでも、「6」という結果になります。「6」は金曜日に対応しているので、カレンダーと同じ結果が得られました。
曜日を表すクラス名と整数値の対応は下記のとおりです。これ以外の値は、実行時エラーとなります。
・0:vbUseSystemDayOfWeek(PCのOSのシステム時間)
・1:vbSunday (日曜日)
・2:vbMonday (月曜日)
・3:vbTuesday (火曜日)
・4:vbWednesday (水曜日)
・5:vbThursday (木曜日)
・6:vbFriday (金曜日)
・7:vbSaturday (土曜日)
マクロ例:(実行結果が5と表示:木曜日で、カレンダーと一致しない:不正解)なお、Weekday関数の2つ目のパラメータを変更した場合は、求める整数値が本来の値と異なることもあります。
1 2 3 4 5 |
Sub Weekday_sample_03() MsgBox "2016/1/1の曜日の整数値は" & vbCrLf & Weekday("2016/1/1", 2) '第一週の最初の日の曜日を月曜日にした。 End Sub |
Weekday関数で求めた整数値を曜日名に変更するWeekdayName関数
上記Weekday関数だけでは曜日が分からないので、WeekdayName関数で曜日表示に直すことが可能です。
WeekdayName(Weekday関数で求めた整数値, 曜日を省略表示するかどうか, 週の第1日目の曜日を示す値またはクラス名)
1番目のパラメータには、0から7の数字か数式、Weekday関数で求めた数値またはクラス値のみ。
2番目のパラメータは、省略した場合はFalse(日曜日、月曜日、…)、Trueで省略された曜日表示(日、月、…)
3番目のパラメータは、Weekday関数と同じ内容で省略可能です。基本的には、Weekday関数と同じ設定にします。
マクロ例:
1 2 3 4 5 |
Sub Weekday_sample_04_01() '表示は"金曜日" MsgBox "2016/1/1の曜日は" & vbCrLf & WeekdayName(Weekday("2016/1/1")) End Sub |
1 2 3 4 5 6 |
Sub Weekday_sample_04_02() '表示は"金" '2番目のパラメータが"True"のため、省略された曜日表示となる MsgBox "2016/1/1の曜日は" & vbCrLf & WeekdayName(Weekday("2016/1/1"), True) End Sub |