【ExcelVBA】曜日を取得する方法とは?日付+曜日を取得する方法も解説

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、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で曜日を取得する方法について解説しました。日付を使う場合は、曜日をセットで表示したいケースが多いですよね。使い方も簡単なので、ぜひ使ってみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次