こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで曜日を取得する方法を知っていますか? 日付を書きたいときに曜日まで表示したいケースはよくありますよね。
そこで今回は、
- 曜日を取得する方法とは
といった基礎的なことから、
- 曜日名を取得するためのサンプルコード
- Format関数を使った曜日の表示形式を指定する方法
- 合わせて覚えると便利な日付・時刻取得方法と
といった応用的な方法まで、徹底的に解説します!
曜日を取得する方法とは
はじめに、VBAで曜日を取得する方法について解説します。曜日を取得する方法は大きく分けて2パターンあります。
- Weekday関数を使って曜日番号を取得する方法
- WeekdayName関数を使って曜日名を取得する方法
それぞれ解説しますね。
Weekday関数:曜日番号の取得
まずは、Weekday関数を使って曜日番号を取得する方法について解説します。Weekday関数を使えば、次のように簡単に曜日番号を取得することができます。
Weekday関数の使い方:
Weekday("YYYY/MM/DD")
結果は数字で返ってくるのですが、以下のように数字毎に曜日が決まっています。
- 1:日曜
- 2:月曜
- 3:火曜
- 4:水曜
- 5:木曜
- 6:金曜
- 7:土曜
「曜日によって日付の文字の色を変える」のように、曜日によって処理を変えたいときはWeekday関数がおすすめです!
WeekdayName関数:曜日名の取得
つぎは、WeekdayName関数を使って曜日名を取得する方法について解説します。WeekdayName関数を使えば、次のように簡単に曜日名を取得することができます。
WeekdayName関数の使い方:
WeekdayName(曜日番号)
曜日番号はさきほどWeekday関数を使った結果と同じ番号なので、1 ~ 7の数字を入れることで曜日名を取得することができます。このように、曜日名を簡単に取得することができます。
日付から曜日名を取得する方法
ただ、ここまでの説明を聞いて
と思った方もいるのではないでしょうか。確かに曜日番号を直接指定すれば曜日名を取得できますが、実務で使う場合は「日付から曜日名を取得したいケース」が多いですよね。Weekday関数とWeekdayName関数を応用すれば、次のように「日付から曜日名を取得すること」もできます。
日付から曜日名を取得する方法:
WeekdayName(Weekday(“YYYY/MM/DD”))
「Weekday(“YYYY/MM/DD”)」で取得した曜日番号をWeekdayName関数に使うことで、日付から曜日名を取得しています。応用編ですが、この方法を覚えておくと便利です!
曜日名を取得するためのサンプルコード
次に、サンプルコードを使って、具体的な使い方を解説します。
実行前のデータ:
サンプルコード:
Sub Test() 'データの最終行を取得 Dim maxRow As Long maxRow = Cells(Rows.Count, 1).End(xlUp).Row '2行目 ~ 最終行まで曜日書き込み処理をループ Dim i As Long For i = 2 To maxRow Cells(i, 3).Value = WeekdayName(Weekday(Cells(i, 2).Value)) Next i End Sub
実行後のデータ:
「Cells(Rows.Count, 1).End(xlUp).Row」でデータの最終行を取得し、データの行数の数分「Cells(i, 3).Value = WeekdayName(Weekday(Cells(i, 2).Value))」の処理で日付から曜日に変換した値をC列に入れています。このように、簡単に曜日を取得することができます。
Format関数を使った曜日の表示形式を変える方法
ここまで曜日の取得方法を解説してきましたが、「YYYY/MM/DD (曜日)」のような形式で表示したいときもありますよね。Format関数を使えば、簡単に「YYYY/MM/DD (曜日)」の形式で表示することができます。
Format関数を使って曜日を表示する方法:
Format(日付,"YYYY/MM/DD (aaa)")
先ほどのサンプルを「YYYY/MM/DD (曜日)」で書き換えたサンプルを用意しました。
実行前のデータ:
サンプルコード:
Sub Test2() Dim maxRow As Long maxRow = Cells(Rows.Count, 1).End(xlUp).Row '行数分処理をループ Dim i As Long For i = 2 To maxRow Cells(i, 3).Value = Format(Cells(i, 2).Value, "YYYY/MM/DD (aaa)") Next i End Sub
実行後のデータ:
「Format(Cells(i, 2).Value, “YYYY/MM/DD (aaa)”)」で「YYYY/MM/DD (曜日)」に表示するよう処理を書き換えています。このように、Format関数を使えば簡単に「YYYY/MM/DD (曜日)」の形式に書き換えることができます。
ちなみに、Format関数の詳しい使い方については以下で解説しているので、気になる方は見てみてくださいね!
合わせて覚えると便利な日付・時刻取得方法とは
ここまで曜日を取得する方法に特化して解説してきましたが、日付・時刻とあわせて使うケースって多いですよね。Date関数・Time関数・Now関数を使えば、次のように日付・時刻を取得することができます
- Date関数:日付
- Time関数:時刻
- Now関数 :日付 + 時刻
それぞれ以下で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、VBAで曜日を取得する方法について解説しました。日付を使う場合は、曜日をセットで表示したいケースが多いですよね。使い方も簡単なので、ぜひ使ってみてくださいね!