VBA で曜日を取得する WeekdayName関数と WeekDay関数 について解説します。
【VBA】WeekdayName関数
WeekdayName関数 は
の形式で記述して対応する曜日の文字列を得ます。[開始曜日] と [数値] には VBA組込定数あるいはアラビア数字のどちらを入れてもかまいません(下の表を参照してください)。
組込定数 | 値 | 曜日 |
---|---|---|
vbSunday | 1 | 日曜日 |
vbMonday | 2 | 月曜日 |
vbTuesday | 3 | 火曜日 |
vbWednesday | 4 | 水曜日 |
vbThursday | 5 | 木曜日 |
vbFriday | 6 | 金曜日 |
vbSaturday | 7 | 土曜日 |
2番目の引数 [曜日名の省略] というのは、たとえば「火曜日」の「曜日」という文字を省略するかどうかです。するなら True, しないなら False を入れます。この引数を省略すると False を指定したことになります。
3番目の引数 [開始曜日] は基準となる曜日で、ここを 1 として各曜日に番号が振られます。この引数を省略するか 1 を入れると、 [数値] に対応する曜日はそれぞれ上の表にあるとおりになります。しかし [開始曜日] にたとえば vbTuesday または 3 を指定すると、
というように、戻り値がずれます。何がなんだかわかんなくなってしまっても大丈夫。よほど変わったことをしないかぎり、3つめの引数を指定する機会はないと思います。こばとも使ったことないし。何のためにあるのかすらよくわからないし。まあともかく実例を見てみましょう。
Option Base 1
'[VBA] 曜日一覧を出力するプロシージャ
Sub Week_Day_List()
Dim i As Integer
Dim week_name(7) As String
For i = 1 To 7
week_name(i) = WeekdayName(i)
Debug.Print week_name(i);
Next i
End Sub
WeekdayName関数の最初の引数に 1 ~ 7 の数字を順に入れて戻り値を調べています。Week_Day_List() を実行するとイミディエイトウィンドウに
と表示されるはずです。
【VBA】WeekDay関数
WeekdayName とよく似た関数に WeekDay があります(紛らわしいので要注意です)。WeekDay は「日付から曜日に対応する数値を取得する関数」です。戻り値は Variant 型 (内部処理形式は Integer) です。引数は [日付] と [開始曜日] の2つです。
WeekdayName関数と同じく、2つめの引数で対応する曜日をずらしますけど、ほとんど使う機会はなさそうです。それでは簡単なマクロで動作を確認してみましょう。
'[VBA] 今日の曜日を数値で表示します
Sub Week_Date_Number()
Dim week_number As Integer
week_number = Weekday(Date)
Debug.Print week_number
End Sub
Date 関数で今日の日付を得て、そこから曜日を取得しています。Week_Date_Number() を実行すると、そのときの日付に応じて 1 ~ 7 の数値が出力されます。マクロの内部で処理するだけなら、これでもかまいませんが、「今日は何曜日」てことを出力するには数字では愛想がなさすぎます。実際的には下の Week_Date_Name マクロのように WeekdayName関数と組合わせて使用することが多くなると思います。
'[VBA] 今日の曜日名を表示します
Sub Week_Date_Name()
Dim week_name As String
week_name = WeekdayName(Weekday(Date))
Debug.Print "今日は" & week_name & "です"
End Sub
Date 関数で得た日付から曜日を数値で取得し、そこから WeekdayName 関数で曜日名を得ています。Week_Date_Name() を実行すると、そのときの日付に応じて「日曜日」とか「金曜日」などが返ってくるはずです。次は明後日の曜日を返すマクロを作ってみましょう。
'[VBA] 明後日の曜日名を表示します
Sub Day_After_Tomorrow()
Dim week_name As String
week_name = WeekdayName(Weekday(Date + 2))
Debug.Print "明後日は" & week_name & "です"
End Sub
Day_After_Tomorrow() では今日の日付 Date に 2 を加えて、明後日(2日後)の曜日を得ています。Day_After_Tomorrow() を実行すると、そのときの日付に応じて
明後日は金曜日です
のようなメッセージが返ります。
コメント