VBA で曜日を取得する WeekdayName 関数と WeekDay 関数 について解説します。
【VBA】WeekdayName関数
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 を指定すると、
1:火 2:水 3:木 4:金 5:土 6:日 7:月
というように、戻り値がずれます。何がなんだかわかんなくなってしまっても大丈夫。よほど変わったことをしないかぎり、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】日付型変数と日付シリアル値
【VBA】WeekDay関数
WeekdayName とよく似た関数に WeekDay があります(紛らわしいので要注意です)。WeekDay は「日付から曜日に対応する数値を取得する関数」です。戻り値は Variant 型 (内部処理形式は Integer) です。引数は [日付] と [開始曜日] の2つです。
WeekDay(日付, [開始曜日])
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() を実行すると、そのときの日付に応じて「明後日は金曜日です」のようなメッセージが返ります。
コメント