Excel VBAで曜日を取得する:Weekday, WeekdayName

特定の日付の曜日を取得する場合、VBAでは日付関数 Weekday と、WeekdayNameを組み合わせて行ないます。

特定の日付の曜日を示す整数値を求めるWeekday関数

Weekday関数は、関数の構文は以下の通りです。

Weekday(日付, 週の第1日目の曜日を示す値またはクラス名)

日付は調べたい日付(「2016/1/1」のような日付を示す文字列も可能)を記入します。「月の最初の曜日を示す値」は省略可能です。省略した場合、VBAではPCのOSのシステム時間がデフォルトとして設定されます。

マクロ例:

Sub Weekday_sample_01() '文字列で代入

    MsgBox "2016/1/1の曜日の整数値は" & vbCrLf & Weekday("2016/1/1")

End Sub
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つ目のパラメータを変更した場合は、求める整数値が本来の値と異なることもあります。

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関数と同じ設定にします。

マクロ例:

Sub Weekday_sample_04_01() '表示は"金曜日"

    MsgBox "2016/1/1の曜日は" & vbCrLf & WeekdayName(Weekday("2016/1/1"))

End Sub
Sub Weekday_sample_04_02() '表示は"金"

  '2番目のパラメータが"True"のため、省略された曜日表示となる 
    MsgBox "2016/1/1の曜日は" & vbCrLf & WeekdayName(Weekday("2016/1/1"), True)

End Sub

イベント

2017/12/05(火)
Design Thinking Square