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”をつかって、表示形式で日付を曜日に変更することができます。
曜日を算出する方法の紹介でした。