VBAで日付の曜日を取得する(Weekday)

Weekday

Weekday関数は引数の日付の曜日を数値で返却します。引数の日付はCDate関数でDate型変数に変換できるものを設定します。

CDate関数は時刻もDate型に変換するため、時刻からも曜日を取得可能です。Date型は年月日時分秒を必ず持っているため、時刻だけを指定した場合も仮の日付を持っています。その日付は1899年12月30日の土曜日のため、Weekday関数に時刻を指定した場合は必ず土曜日の7が返却されます。

日付が不正の場合はエラーになるため、IsDate関数などで日付として問題がないか事前にチェックした方がよいでしょう。

構文

Date 曜日を知りたい日付を指定します。
FirstDayOfWeek 戻り値の数値の1を何曜日にするかをVbDayOfWeek列挙型で指定します。

VbDayOfWeek列挙型

定数 内容
vbUseSystemDayOfWeek 0 Windowsのカレンダーの設定で週の最初の曜日に指定された曜日が設定されます。
vbSunday 1 日曜日を1とします。既定値です。
vbMonday 2 月曜日を1とします。
vbTuesday 3 火曜日を1とします。
vbWednesday 4 水曜日を1とします。
vbThursday 5 木曜日を1とします。
vbFriday 6 金曜日を1とします。
vbSaturday 7 土曜日を1とします。

vbUseSystemDayOfWeekはWindows7であればコントロールパネル→地域と言語→形式タブ の「週の最初の曜日」に設定されている曜日になります。

戻り値(Integer) 引数日付の曜日を以下の数値で返却します。返却される値はVbDayOfWeek列挙型の各曜日と同じ値になります。

曜日 数値
日曜日 1
月曜日 2
火曜日 3
水曜日 4
木曜日 5
金曜日 6
土曜日 7



サンプルコード

日付、時刻、エラーとなる日付の3つを用意して、それぞれに対してIsDate関数を行い、チェックOKであればWeekday関数を行うサンプルです。

実行結果

IsDate関数の問題点

上記サンプルで時刻”23:59:59″を使っていますが、時刻なのにWeekday関数で7(土曜日)が返却されています。

このようにIsDate関数は時刻も正常とみなしてしまいます。

時刻はNGとして扱いたい場合はIsDate関数では正しく判定できません。「8桁日付やスラッシュ編集日付用のIsDate関数」で対応方法を書いています。

関連記事

サブコンテンツ

このページの先頭へ