【EXCEL VBA | Weekday関数・WeekdayName関数・Format関数 】日付から曜日を取得する

スポンサーリンク

日付から曜日を取得する方法を紹介します!

Weekday関数

日付から曜日番号を取得する関数

構文

Weekday(日付)

引数に日付のデー日付タを入れるだけの簡単作業です!

やってみましょう!

サンプル

A列に入力された日付から、曜日番号を取得してB列に入力していきます。

コードはこちらです。

Sub sample()

    Dim i As Long
    For i = 2 To 9 '2行目から9行目まで処理
       Cells(i, 2) = Weekday(Cells(i, 1))
    Next
    
End Sub

簡単ですね。

Weekday関数に通してるだけです。

実行してみます。

B列に数値が入力されました。

この番号が、曜日を表しています。

何曜日を1にするかというのは、オプション(引数の設定)で指定することも出来ますが、引数を何も指定していないと日曜日が「1」になります。

つまり、

1 → 日曜日

2 → 月曜日

3 → 火曜日

4 → 水曜日

5 → 木曜日

6 → 金曜日

7 → 土曜日

となります。

Weekday関数では、このように曜日番号が返されるので、文字列の曜日を取得するためには、この番号を文字列の曜日に変換する工夫が必要です。

この変換の工程は、Choose関数を利用すると便利です(^o^)

構文

Choose(index番号, index1の値, index2の値, index3の値,......)

第2引数以降に指定した、indexの値の中から、index番号で指定した番号の値を取り出してくれる関数です。

例えば、曜日番号から、文字列の曜日を取り出すときには次のようにします。

Choose(n, "日", "月", "火", "水", "木", "金", "土")

「n」の値が、1なら「日曜日」、3なら「火曜日」が取り出されるという具合です。

先程のWeekday関数と組み合わせると次のようなコードになります。

Sub sample()

    Dim i As Long
    For i = 2 To 9 '2行目から9行目まで処理
       Cells(i, 2) = Choose(Weekday(Cells(i, 1)), "日", "月", "火", "水", "木", "金", "土")
    Next
    
End Sub

Choose関数の、nの部分にWeekday関数を入れ込んで、曜日番号を指定しています。

実行してみましょう!

曜日の文字列に変換することが出来ましたね(^o^)

ちなみに、Choose関数を

Choose(n, "(日)", "()", "()", "()", "()", "()", "(土)")

など、カッコ書きにすればカッコ書きで曜日を入れれますし、「日曜日」などとすればそのように入れることが出来ます!

WeekdayName関数

曜日番号から、文字列の曜日を取得する関数

構文

WeekdayName(曜日番号)

先程は、Choose関数を使って文字列の曜日名を取得しましたが、実はこのWeekdayName関数を使うことでも簡単に文字列の曜日を取得することが出来ます。

同じサンプルで、WeekdayName関数を利用したコードはこちらです。

Sub sample()

    Dim i As Long
    For i = 2 To 9 '2行目から9行目まで処理
       Cells(i, 2) = WeekdayName(Weekday(Cells(i, 1)))
    Next
    
End Sub

Weekday関数で取得した曜日番号を、WeekdayNamse関数の引数に指定してるだけですね(^o^)

実行します。

曜日が取得出来ました(^o^)

Weekday関数のときと同じですが、曜日番号はデフォルトだと1が日曜日になっています。

変更が必要な場合は、WeekdayName関数もオプション(引数)で指定することが出来ます。

じゃあこれでいいじゃん。。。

って感じだと思いますが、WeekdayName関数は、実行結果の通り「日曜日」「月曜日」という表記を変更することが出来ません。

「日」「月」などと表したい場合は、Choose関数が便利です。

Format関数

最後にFormat関数を紹介します。

Format関数は日付だけでなく、様々なデータの書式を設定することが出来る関数ですが、これを使うことで、日付から曜日を取得することが出来ます。

ワークシート上でも、ユーザー定義の書式設定ってあると思いますが、そんな感じだと思ってもらって良いと思います。

以前に、ちょっと書いた記事があるので参考に付けさせていただきます!

では早速やり方です。

構文

Format(日付, 形式)

形式の部分に、次のような文字列を指定すると、曜日を取り出すことが出来ます!

形式に設定する文字列意味
"aaa"曜日:日本語の省略系日、月、火、水、木、金、土
"aaaa"曜日:日本語の省略なし日曜日、月曜日、火曜日、
水曜日、木曜日、金曜日、土曜日
"ddd"曜日:英語の省略形Sun,Mon,Tue,Wed,Thu,Fri,Sat
"dddd"曜日:英語の省略なしSunday,Monday,Tuesday,
Wednesday,Thursday,Friday,Saturday

やってみましょう!

コードはこちらです。(サンプルは同じ)

Sub sample()

    Dim i As Long
    For i = 2 To 9  '2行目から9行目まで処理
    
       Cells(i, 2) = Format(Weekday(Cells(i, 1)), "aaa")
       Cells(i, 3) = Format(Weekday(Cells(i, 1)), "aaaa")
       Cells(i, 4) = Format(Weekday(Cells(i, 1)), "ddd")
       Cells(i, 5) = Format(Weekday(Cells(i, 1)), "dddd")

    Next
    
End Sub

"aaa"をB列、"aaaa"をC列、"ddd"をD列、"dddd"をE列の表示します。

実行します。

きれいに出来ましたね(^o^)