Weekday
Weekday関数は引数の日付の曜日を数値で返却します。引数の日付はCDate関数でDate型変数に変換できるものを設定します。
CDate関数は時刻もDate型に変換するため、時刻からも曜日を取得可能です。Date型は年月日時分秒を必ず持っているため、時刻だけを指定した場合も仮の日付を持っています。その日付は1899年12月30日の土曜日のため、Weekday関数に時刻を指定した場合は必ず土曜日の7が返却されます。
日付が不正の場合はエラーになるため、IsDate関数などで日付として問題がないか事前にチェックした方がよいでしょう。
構文
1 |
Function Weekday(Date, [FirstDayOfWeek = vbSunday]) As Integer |
Date | 曜日を知りたい日付を指定します。 | |||||||||||||||||||||||||||
FirstDayOfWeek | 戻り値の数値の1を何曜日にするかをVbDayOfWeek列挙型で指定します。
VbDayOfWeek列挙型
vbUseSystemDayOfWeekはWindows7であればコントロールパネル→地域と言語→形式タブ の「週の最初の曜日」に設定されている曜日になります。 |
|||||||||||||||||||||||||||
戻り値(Integer) | 引数日付の曜日を以下の数値で返却します。返却される値はVbDayOfWeek列挙型の各曜日と同じ値になります。
|
サンプルコード
日付、時刻、エラーとなる日付の3つを用意して、それぞれに対してIsDate関数を行い、チェックOKであればWeekday関数を行うサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub WeekdayPatternTest() Dim ar() Dim i ReDim ar(2) ar(0) = "2017/12/2" ar(1) = "23:59:59" ar(2) = "10000/12/25" For i = 0 To UBound(ar) If (IsDate(ar(i)) = True) Then Debug.Print "IsDate=" & IsDate(ar(i)) & " : " & ar(i) & " Weekday=" & Weekday(ar(i)) Else Debug.Print "IsDate=" & IsDate(ar(i)) & " : " & ar(i) End If Next End Sub |
実行結果
1 2 3 |
IsDate=True : 2017/12/2 Weekday=7 IsDate=True : 23:59:59 Weekday=7 IsDate=False : 10000/12/25 |
IsDate関数の問題点
上記サンプルで時刻”23:59:59″を使っていますが、時刻なのにWeekday関数で7(土曜日)が返却されています。
このようにIsDate関数は時刻も正常とみなしてしまいます。
時刻はNGとして扱いたい場合はIsDate関数では正しく判定できません。「8桁日付やスラッシュ編集日付用のIsDate関数」で対応方法を書いています。