7/09/2020

Excel VBA。日付から曜日を求めるにはWeekdayName関数を使うのもあり【Day of the week】

Excel VBA。日付から曜日を求めるにはWeekdayName関数を使うのもあり

<Excel VBA:WeekdayName関数>

ルーチンワークや大量のデータなどを高速で処理することができる、マクロ。
Excel VBA。

今回は、データ読み込んだら、曜日がないので、曜日を挿入する方法を確認していきます。

別にマクロを用意しなくても、Excel 上で、Weekday関数やText関数をつかって表示させる方法やセル参照と表示形式で、曜日を算出する方法はあります。

だけど、ちょっと面倒な数式を毎回作るというのも面倒ですし、時間もかかります。

連続している日ならば、数式を設定しなくても、オートフィルで連続コピーでも対応できますが、先頭の日付の曜日を調べなければならず、それもまた面倒です。

そこで、Excel VBAをつくっておけば、簡単に処理してくれるわけですね。

プログラム文自体も難しくありませんが、曜日を算出する方法がいくつかありますので、今回は、3つをご紹介していきます。

次の表は、読み込んだデータです。

【Weebday関数とChoose関数のコラボ】
Excelでもよく使用する、「Weebday関数とChoose関数のコラボ」のプログラム文です。

Sub 曜日()
    Dim youbi As Long
    Dim i As Long
    Dim lastrow
   
    lastrow = Cells(Rows.Count, "a").End(xlUp).Row

    For i = 2 To lastrow
        youbi = Weekday(Cells(i, "A"))
        Cells(i, "b") = Choose(n1, "日", "月", "火", "水", "木", "金", "土")
    Next
End Sub

説明しますと、
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
は、データの最終行を算出しています。
これは、次のFor To Next文で何回繰り返すのかで必要なので、算出させています。

そして、For To Next文の繰り返し処理ですが、
youbi = Weekday(Cells(i, "A"))
Cells(i, "b") = Choose(n1, "日", "月", "火", "水", "木", "金", "土")

Excel VBAにも、Weekday関数が用意されています。

ExcelのWeekday関数と同じで、日曜日が1、月曜日が2というように、曜日ごとの数値を算出します。

その算出されたものは数値なので、日~土の文字に変える必要があります。

次の行の、Choose関数で、数値に対する曜日の文字を割り当てています。

Choose関数もExcelと同じ動きをします。

では、実行してみましょう。
 
このように、曜日を算出することができました。

Excelでお馴染みの方法をExcel VBAに取り込んだ方法ですね。

【Weekday関数とWeekdayName関数】
Choose関数ではなくて、WeekdayName関数をつかう方法もあります。

このWeekdayName関数は、Excelにはありません。Excel VBAにある関数です。

Choose関数は、「"日", "月", "火", "水", "木", "金", "土"」と入力する必要がありますが、結構面倒です。
そこを省略できる関数が、WeekdayName関数です。

Sub 曜日()
    Dim youbi As Long
    Dim i As Long
    Dim lastrow
   
    lastrow = Cells(Rows.Count, "a").End(xlUp).Row

    For i = 2 To lastrow
        youbi = Weekday(Cells(i, "A"))
        Cells(i, "b") = WeekdayName(youbi, True)
    Next
End Sub

Cells(i, "b") = WeekdayName(youbi, True)
引数のTrueに設定すると、「日」「月」と表示されます。
Falseに設定すると「日曜日」と曜日が付きます。

Choose関数よりも省略した方法が、WeekdayName関数ですね。

【Format関数で表示形式をコントロール】
Format関数をつかって、曜日を算出することもできます。

Format関数は、Excelにはありません。
Format関数は、ExcelのText関数と同じように表示形式をコントロールするExcel VBAの関数です。

Sub 曜日()
    Dim i As Long
    Dim lastrow
   
    lastrow = Cells(Rows.Count, "a").End(xlUp).Row

    For i = 2 To lastrow
        Cells(i, "b") = Format(Cells(i, "a"), "aaa")
    Next
End Sub

Format関数をつかったプログラム文です。
Cells(i, "b") = Format(Cells(i, "a"), "aaa")
“aaa”をつかって、表示形式で日付を曜日に変更することができます。

曜日を算出する方法の紹介でした。