VBAの組込関数「WeekDay関数」と、
ワークシート関数「WEEKDAY関数」の違いを解説します。
同じところ
どちらも日付を受け取って曜日を「数字」で返す関数です。
以下のコードは同じ「3(水曜日)」を返します。
曜日No = WeekDay(#2025/4/1#) 曜日No = WorksheetFunction.WeekDay(#2025/4/1#)
曜日を日曜1~土曜7のような数値で受け取ることで、
カレンダーの作成などに使用する関数です。
違うところ
両関数とも第2引数で「何曜日を1とするか」を設定できるのですが、
この第2引数の設定値が異なります。
まずVBAのWeekDay関数ですがこちらは単純で、
2を渡すと月曜日、3を渡すと火曜日、…を1として動くようになります。
第二引数 | 曜日との対応 |
---|---|
1 | 日曜1~土曜7 |
2 | 月曜1~日曜7 |
3 | 火曜1~月曜7 |
4 | 水曜1~火曜7 |
5 | 木曜1~水曜7 |
6 | 金曜1~木曜7 |
7 | 土曜1~金曜7 |
こちらは直観的にわかりやすいですね。
続いてシート関数のWEEKDAY関数ですが、
こちらは数値に規則性はなく、少々ややこしい挙動になります。
第二引数 | 曜日との対応 |
---|---|
1 | 日曜1~土曜7 |
2 | 月曜1~日曜7 |
3 | 日曜0~土曜6 |
11 | 月曜1~日曜7 |
12 | 火曜1~月曜7 |
13 | 水曜1~火曜7 |
14 | 木曜1~水曜7 |
15 | 金曜1~木曜7 |
16 | 土曜1~金曜7 |
17 | 日曜1~土曜7 |
よく使うもの3選を1~3に配置し、
11~17に残りを規則的に配置していますね。
よく見ると1と17が同じ挙動、2と11も同じ挙動です。
使い分け
VBAのWeekDay関数の方が直観的にわかりやすいため、
通常はこちらを使用しておけばよいと思います。
第2引数に渡す値と返り値が一致していますからね。
どちらも「1」が日曜日を指すため仕様を理解しやすいです。
対してシート関数のWEEKDAYが優れているのが、
「0始まりの設定ができる」という点になります。
カレンダーのOffsetを計算したりするときは、
曜日が1~7でなく0~6だとありがたい場面は結構あると思います。
その時は、WorksheetFunction.WeekDayを使用し、
第2引数に「3」を渡して0始まりの設定で使ってみてください。