日付から曜日を取得する方法を解説します。
MonやTue、月・火などの曜日名が欲しい場合はFormat関数を、
曜日番号を取得したい場合はWeekDay関数を使用します。
Format関数を使用して曜日名を取得する
日付から曜日名を取得するには、以下のコードを実行します。
Sub 日付から曜日を取得する() Dim 日付 As Date 日付 = Date Dim 曜日 As String 曜日 = Format(日付, "aaa") ' 水 曜日 = Format(日付, "aaaa") ' 水曜日 曜日 = Format(日付, "ddd") ' Wed 曜日 = Format(日付, "dddd") ' Wednesday End Sub
Format関数はワークシート関数「TEXT」とほぼ同じ仕様の関数で、
渡された値をセルの表示書式と同形式の文字列に変換します。
日付を受け取った場合は"y"なら年、"m"なら月といったように動き、
シート関数と同様、"aaa"や"ddd"で曜日が取得できます。
曜日を文字列で取得したい場合は、Format関数を使用してください。
Weekday関数を使用して曜日番号を取得する
続いて日付から曜日番号を取得するコードがこちらです。
Sub 日付から曜日番号を取得する() Dim 日付 As Date Dim 曜日No As String 日付 = DateSerial(2025, 6, 1) ' ←日曜日 曜日No = Weekday(日付) ' = 1 日付 = DateSerial(2025, 6, 7) ' ←土曜日 曜日No = Weekday(日付) ' = 7 End Sub
WeekDay関数は、日曜日:1~土曜日:7とした数値で曜日を取得します。
曜日 | WeekDay(日付) |
---|---|
日 | 1 |
月 | 2 |
火 | 3 |
水 | 4 |
木 | 5 |
金 | 6 |
土 | 7 |
使い道としては、カレンダーを作成する際の判定として使用したり、
ある月の第1日曜日の日付を取得するなどに使用します。
' カレンダー上でy年m月1日の出力セルを取得する カレンダー左上セル.Offset(0, Weekday(Datesirial(y, m, 1)) - 1) ' ある月の第1日曜日 第1日曜日 = DateSerial(y, m, 8 - Weekday(DateSerial(y, m, 1), 2))
上記のコードで使用していますが、
WeekDay関数の第二引数で「何曜日を1にするか」を指定できます。
第1日曜日を調べる際は「月曜日を1とする」と計算が楽なので、
第二引数に「2」を渡して計算を行っていますね。
この仕様はワークシート関数「WEEKDAY」とは異なりますので、
注意して使用してください。
シート関数のWEEKDAYは「0始まり」を指定出来たり、
11~17番で各曜日を指定したりと、渡す引数はごとに固有の動きをします。
対してVBAのWeekDay関数は単純に「何曜日を1とするか」をしていますので、
混同しないように気を付けてください。
おまけ:WeekDayName関数
WeekDay関数で取得した1~7の数値を曜日名に変換する、
WeekDayName関数というのもあります。
Debug.Print WeekdayName(1) ' = 日曜日
ただしこちらの関数は「システム設定に依存した曜日名」しか取れず、
例えば私のPC環境では「日曜日,月曜日,…」しか取得できません。
Format関数があるためわざわざこの関数を使用する意味はないと思いますが、
一応存在を知っておくと使い道があるかもしれません。
心の片隅にでも、置いておいて下さい。