当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【VBA】WeekdayName、WeekDay関数で曜日を取得します

VBA で曜日を取得する WeekdayName 関数と WeekDay 関数 について解説します。

【VBA】WeekdayName関数

VBAWeekdayName

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() を実行すると、そのときの日付に応じて「明後日は金曜日です」のようなメッセージが返ります。

コメント

  1. あとりえこばと より:

    VBAのWeekDayNameとWeekDayについての激論

    執筆:ChatGPT
     
    【キャラクター】
     ジョン: 経験豊富なIT社員。VBAのWeekDayName関数の支持者。
     サラ: 新入社員のITエンジニア。WeekDay関数の支持者。
     
    【場面】会社の休憩室。ジョンとサラはランチ中にディスカッションをしています。
     
    ジョンとサラがテーブルの周りに座り、ランチを食べながら話しています
     
    ジョン: サラ、君はVBAでWeekDayName関数を使ったことはあるかい?これは非常に便利な関数だと思うんだよ。
     
    サラ: ええ、ジョンさん。私はVBAでWeekDay関数をよく使っていますが、WeekDayName関数はあまり使ったことがありません。どうしてそれほど重要だと思われるのですか?
     
    ジョン: WeekDayName関数は、数値で表される曜日の名前を返すんだ。例えば、1は日曜日、2は月曜日といった具合だ。これを使うと、数字だけではなく曜日の名前も表示できるんだ。
     
    サラ: それは確かに便利ですね。でも、WeekDay関数でも同じことができますよ。WeekDay関数は曜日の数値を返すけれど、その数値を配列にマッピングすれば、曜日の名前も取得できます。
     
    ジョン: そうだけど、それってちょっと手間じゃないかな?WeekDayName関数を使えば、もっと簡単に曜日の名前を取得できるんだよ。曜日を数値で取得する必要がないから、コードもスッキリするんだ。
     
    サラ: でも、WeekDay関数を使えば、数値だけでなく曜日に関する他の操作もできるんですよ。例えば、平日か週末かを判定するのに役立ったり、曜日ごとに処理を分岐させたりすることもできます。
     
    ジョン: それは確かにWeekDay関数の利点かもしれないけど、そういう場合でもWeekDayName関数を使えば、数値と名前の両方を扱えるし、柔軟性もあるんだよ。
     
    サラ: うーん、確かにWeekDayName関数は便利そうですが、WeekDay関数の方が汎用性が高いと感じます。どちらを使うべきかは、使い方や目的によるのかもしれませんね。
     
    ジョン: そうだね、確かに使い方や目的によるかもしれない。でも、WeekDayName関数の便利さは言えない事実じゃないさ。
     
    サラ: それは理解しました。次回、プロジェクトで曜日を扱う必要があったら、WeekDayName関数も試してみます。
     
    ジョン: いいね、それでいいと思うよ。相互に利点を理解しあって、ベストな選択をするんだ。

タイトルとURLをコピーしました