日付と時刻

VBA 日付から曜日を求める

 和暦を表示するのに Format を使いましたが、日付から曜日を取得するにも、Format関数を使うと便利です。

 このほかにも「Weekday関数」「WeekdayName関数」を使って表すこともできます。

それぞれについて解説します。

Format関数で曜日を求める

 Format関数は、一つ目の引数に指定した値を、二つ目の引数に指定した書式に変換した結果を返します。

Format(値, “表示形式文字列”)

Sub youbi()

  Dim DD As Date

  ‘西暦の年月日をDDに代入

  DD = Range(“C2”).Value

  Range(“C5”) = Format(DD, “aaa”)

  Range(“C6”) = Format(DD, “aaaa”)

  Range(“C7”) = Format(DD, “ddd”)

  Range(“C8”) = Format(DD, “dddd”)

  Range(“C9”) = Format(DD, “yyyy/mm/dd(aaa)”)

 End Sub

Weekday関数で曜日を求める

Weekday(日付)

日付の曜日を 1(日曜)から 7(土曜) の数字で取得します。

しかし正確には

Weekday(日付, 最初の曜日)

として「週の最初を何曜日とするか」指定するようになっています。

この「最初の曜日」を省略した場合は ”日曜日から土曜日の順で 1 ~ 7 の数字が返されます。

つまり、

1 = 日曜日

2 = 月曜日

3 = 火曜日

4 = 水曜日

5 = 木曜日

6 = 金曜日

7 = 土曜日

となります。

引数(最初の曜日)

たとえば

Weekday(日付, vbWednesday) ならば、1=水, 2=木, 3=金 ・・ 7=火となります。

特別な場合を除いて、通常は vbSunday つまり 1=日, 2=月 ・・ 7=土 を使用することがほとんどです。

Sub WKday()

  Dim I As Long

  Dim DY As Date

  For I = 3 To 9

    DY = Cells(I, 2)

    Cells(I, 3) = _

Weekday(DY) ‘①

    ‘②

    Select Case Weekday(DY)

    Case 1

    Cells(I, 4) = “日曜日”

    Case 2

    Cells(I,4) = “月曜日”

    Case 3

    Cells(I, 4) = “火曜日”

    Case 4

    Cells(I, 4) = “水曜日”

    Case 5

    Cells(I, 4) = “木曜日”

    Case 6

    Cells(I, 4) = “金曜日”

    Case 7

    Cells(I, 4) = “土曜日”

    End Select

  Next I

End Sub

① 「最初の曜日」が省略されているので、vbSunday 日~土 で値を取得します。

② それぞれの曜日の数値を「Select Case」を使って文字列の曜日に変換し表示します。

WeekdayName関数で曜日を求める

 Weekday関数で返された曜日の値(数字)を引数として、WeekdayName関数を使えば文字列の曜日を取得できます。

Weekday関数の所で説明しましたが、「最初の曜日」は、ここでは省略します。

つまり、1=日曜, 2=月曜, 3=火曜 ・・ 7=土曜 として解説します。

WeekdayName(Weekdayの値, 「曜日」の表示or非表示)

2021/10/01(金)を例に説明します。

Weekday(“2021/10/01”) は金曜日ですので「6」です。

WeekdayName(6) は「金曜日」となります。

「曜日」の表示or非表示 は省略可能ですので、ここでは省略します。

WeekdayName(6, Flase) は「金曜日」となります。

False とは「〇曜日」の「曜日」を省略しないという意味です。

WeekdayName(6,True) は「金」となり ”曜日” が省略されています。

プロシージャはこうなります。

Sub WKday2()

 Dim DY As Date

 Dim WK As Long

 DY = Weekday(Range(“B2”))

 Range(“C4”) = WeekdayName(DY)

 Range(“C5”) = WeekdayName(DY, False)

 Range(“C6”) = WeekdayName(DY, True)

End Sub

まとめ

 以上、日付からの曜日の求め方をお話ししました。

Format関数を使うのが一番わかりやすいです。

しかし場合によっては、Weekday関数、WeekdayName関数が必要になることがあります。

一応知識として頭に入れておいてください。

なお、Excelの古いバージョンによっては、Format(aaa), Format(ddd) が使えないものもありますので注意してください。

VBA 日付(西暦・和暦)と時刻を求める  日付および時刻に関してはいろいろな関数が準備されています。 これらを使って今日の日付を表したり、今現在の時刻や年・月・日を数値...
VBA 月末日を求める  月の始まりは毎月1日ですのでなにも問題ありませんが、月末となると月によって異なりますし、2月となれば28日もあれば閏年の29日もあり...