Excel。マクロ029。データを読み込んだ後に曜日を設定する。
<Excel VBA>
大量のデータを読み込んだ後に、データの生成をしますが、その時に日付から曜日を算出するということをよく行います。
Excelの関数を使ってもいいのですが、
データの読み込みをExcel VBAを使って行った場合、
わざわざ改めて、数式を作って算出するよりも、
Excel VBAの構文を合わせて作ると効率がいいわけですね。
そこで今回は、曜日を算出するに当たり、
様々な方法がありますので確認していくことにします。
では、次のような表を用意します。
そして、作るExcel VBAはというと、次のような構文を作ります。
Sub 曜日()
Dim n1 As Long
Dim i As Long
Dim lastrow
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
For i = 2 To lastrow
n1 = Weekday(Cells(i, "A"))
Cells(i, "b") = n1
Cells(i, "c") = Choose(n1, "日", "月", "火", "水", "木", "金", "土")
Cells(i, "d") = WeekdayName(n1, True)
Cells(i, "e") = Format(Cells(i, "a"), "aaa")
Next
End Sub
まずはマクロを実行してみましょう。
このように曜日が算出することができました。
では、一つずつExcel VBAの構文を確認していくことにしましょう。
Dim n1 As Long
Dim i As Long
Dim lastrow
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
この4行は、お馴染みの変数を定義しています。
n1は、Weekday関数で算出した値を入れる変数ですね。
iは、件数分を繰り返すための変数ですね。
lastrowは、最終行の行番号を入れるための変数ですね。
この数値まで繰り返すわけですね。
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
この構文は、お馴染みですね。
データの最終行の数値を算出することが出来る一文ですね。
そして、
For i = 2 To lastrow
Next
で、処理を繰り返すわけです。
【基本はWeekday関数】
Excel関数と同じように、曜日を算出するためには、Weekday関数が基本でして、このWeekday関数から算出された数値を元に、
様々な関数を使って、
曜日をわかりやすく文字として算出させていくわけですね。
n1 = Weekday(Cells(i, "A"))
Cells(i, "b") = n1
A列の日付に該当する、数値をB列に算出させたのが、この構文ですね。
日曜日を1として、土曜日を7という数値で算出しています。
【Choose関数はちょっと面倒】
B列は単なる日付から該当する曜日を数値化しているだけなので、何曜日なのか見てすぐにわかりません。
そこで、C列はどのようにして曜日を文字にしたのかというと、
Choose関数を使っているわけですね。
それがこの構文。
Cells(i, "c") = Choose(n1, "日", "月", "火", "水", "木", "金", "土")
1だったら、”日”と表示するようになるわけですね。
ただ、日~土まで入力しないといけないので、少し面倒ですね。
【WeekdayName関数というのがある】
Excel関数には、なぜか用意されていないのに、Excel VBAの関数としては用意されていて便利なのが、
このWeekdayName関数
Nameと付いているだけに、なんと、文字として表示してくれるわけです。
それが、この構文。
Cells(i, "d") = WeekdayName(n1, True)
TrueをFalseにするか、省略すると、”~曜日”と表示を変えることができます。
しかし、なんで、このWeekdayName関数。Excel関数にないんだろう?
【表示形式でお馴染みのFormat関数】
そして、E列はFormat関数を使っています。Cells(i, "e") = Format(Cells(i, "a"), "aaa")
表示形式でお馴染みですね。
このように、曜日を算出するのに様々なものが用意されていますので、
自分で合うもの、わかりやすいものを覚えておくといいですね。