スライドショー

【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関数の詳しい使い方については以下で解説しているので、気になる方は見てみてくださいね!

【VBA】Formatで日付・時刻、数値、文字列の表示設定(和暦、曜日)
更新日 : 2019年4月21日

合わせて覚えると便利な日付・時刻取得方法とは

ここまで曜日を取得する方法に特化して解説してきましたが、日付・時刻とあわせて使うケースって多いですよね。Date関数・Time関数・Now関数を使えば、次のように日付・時刻を取得することができます

  • Date関数:日付
  • Time関数:時刻
  • Now関数 :日付 + 時刻

それぞれ以下で詳しく解説しているので、気になる方は見てみてくださいね!

【ExcelVBA入門】 日付・時刻を取得するためのNow関数の使い方とは?
更新日 : 2018年10月13日

まとめ

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

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。