6/13/2018

Excel。マクロ029。データを読み込んだ後に曜日を設定する。【The day of the week】

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")
表示形式でお馴染みですね。

このように、曜日を算出するのに様々なものが用意されていますので、
自分で合うもの、わかりやすいものを覚えておくといいですね。