VBA Weekday 関数:曜日を取得する

はじめに

Excel VBA マクロの Weekday 関数から曜日を取得する方法を紹介します。

Weekday 関数は、指定した日付の曜日を数値で返します。

日月火水木金土 の順番に 1,2,3,4,5,6,7 の値を返します

日曜日なら 1 を返します。

日付の曜日を取得や判定したいときに使用します。

曜日の名前を取得するには「WeekdayName 関数」を使用します。
  • 目次
    • Weekday 関数
    • 解説
    • 使用例

Weekday 関数

Weekday(日付)
日付の曜日を 1 (日曜) ~ 7 (土曜) の値で取得します。

Weekday(日付, 最初の曜日)
週の最初の曜日を指定できます。

引数「日付」日付を指定します。
引数「最初の曜日」省略できます。週の最初の曜日を何曜日にするか指定します。
戻り値の型数値型 (Integer)

引数「最初の曜日」

曜日 説明
vbSunday (既定)日曜日から土曜日までを 1 ~ 7 として結果を返します。
vbMonday月曜日から日曜日までを 1 ~ 7 として結果を返します。
vbTuesday火曜日から月曜日までを 1 ~ 7 として結果を返します。
vbWednesday水曜日から火曜日までを 1 ~ 7 として結果を返します。
vbThursday木曜日から水曜日までを 1 ~ 7 として結果を返します。
vbFriday金曜日から木曜日までを 1 ~ 7 として結果を返します。
vbSaturday土曜日から金曜日までを 1 ~ 7 として結果を返します。

解説

引数「日付」の曜日が 日月火水木金土 の順番に 1,2,3,4,5,6,7 の値を返します。

引数「最初の曜日」が vbMonday (月曜日) なら、月火水木金土日 の順番に 1,2,3,4,5,6,7 の値を返します。

引数「日付」が時刻なら、日付型の初期値 1899/12/30 が土曜日なのでその値を返します。

引数「日付」が数値なら、日付型の初期値 1899/12/30 にその数値の日を足した日付の曜日を返します。

VbDayOfWeek 列挙型の値が、日曜日を 1 とした値に対応しているので、通常は引数「最初の曜日」を省略します。

使用例

曜日を取得する。

1
Dim i As Integer

i = Weekday("2017/1/1") ' 日曜日が 1
Debug.Print(i) ' 1
i = Weekday("2017/1/2")
Debug.Print(i) ' 2

i = Weekday("2017/1/1", vbSunday) ' 日曜日が 1
Debug.Print(i) ' 1
i = Weekday("2017/1/2", vbSunday)
Debug.Print(i) ' 2

i = Weekday("2017/1/1", vbMonday) ' 月曜日が 1
Debug.Print(i) ' 7
i = Weekday("2017/1/2", vbMonday)
Debug.Print(i) ' 1

i = Weekday("1899/12/30")
Debug.Print(i) ' 7
i = Weekday("1:2:3") ' 1899/12/30 1:02:03 の曜日
Debug.Print(i) ' 7
i = Weekday(1)       ' 1899/12/31 の曜日
Debug.Print(i) ' 1

曜日を判定

曜日を判定して条件分岐するには vbSunday などは VbDayOfWeek 列挙型の値を使用すると便利です。

' 曜日を判定して分岐する
Select Case Weekday("2017/1/1")
    Case vbSunday
    Case vbMonday
    Case vbTuesday
    Case vbWednesday
    Case vbThursday
    Case vbFriday
    Case vbSaturday
End Select

曜日名を取得

WeekdayName 関数」を使用して、曜日名を取得できます。

Dim s As String
Dim i As Integer

i = Weekday("2017/1/1")
s = WeekdayName(i)
Debug.Print(s) ' 日曜日

s = WeekdayName(i, True)
Debug.Print(s) ' 日