【Excel VBA】日付から曜日を取得する(Weekday/WeekdayName)

はじめに

今回は、日付から曜日を取得する方法について解説します。
月曜日 などの文字列を取得する方法や、土日を判定する方法など、汎用的なサンプルコードも掲載しています。
是非最後までお付き合いください。

この記事を読むメリット
  • 日付から曜日を取得する方法が分かります。
  • 「月曜日」や「月」など、様々な変換バリエーションを紹介しています。
  • コピペで使える実践的なサンプルコードを掲載しています。

基本情報

Weekday関数

日付から「曜日を表す数値」を取得するには、Weekday関数を使用します。
Weekday関数では、日曜日は「1」、月曜日は「2」のような数値が戻ります。

構文

Weekday(Date)

引数

Date … Date型の日付を指定します。

戻り値

戻り値として、引数に指定した日付から「曜日を表す数値」を返却します。
これらの数値は、定数と連動しているため、併せてご紹介します。

#戻り値定数説明
11vbSunday日曜日
22vbMonday月曜日
33vbTuesday火曜日
44vbWednesday水曜日
55VbThursday木曜日
66VbFriday金曜日
77VbSaturday土曜日
Weekday – 戻り値

WeekdayName関数

「曜日を表す文字列」を取得するには、Weekday関数を使用します。
「曜日を表す整数値」を引数として、「月曜日」や「水」などの文字列を取得することが出来ます。

構文

Weekday(Weekday, Abbreviate)

引数

#引数必須/任意説明
1Weekday必須Weekday関数で取得できる、「曜日を表す整数値」を指定します。
2Abbreviate任意Trueを指定した場合、「月」などの省略された曜日の文字列が返却されます。
Falseを指定した場合、「月曜日」などの曜日の文字列が返却されます。
※引数を省略した場合、Falseを指定したものと同様の挙動となります。
WeekdayName – 引数

サンプルコード

曜日の文字列を書き出す

サンプルコード
Public Sub writeWeekDay()
    Dim dateVal As Date             ' 日付データ
    Dim currentRowIndex As Integer  ' カレント行Index
    Dim endRowIdex As Integer       ' 最終行Index

    ' 最終行取得
    endRowIdex = ActiveSheet.UsedRange.Rows.Count

    For currentRowIndex = 2 To endRowIdex

        ' 日付データを取得
        dateVal = Cells(currentRowIndex, 2).Value

        ' セルへの書き出し
        Cells(currentRowIndex, 3).Value = WeekdayName(Weekday(dateVal))         ' 曜日
        Cells(currentRowIndex, 4).Value = WeekdayName(Weekday(dateVal), True)   ' 曜日(短縮)
    Next currentRowIndex
End Sub

実行結果(クリックで拡大)

実行前
実行前
実行後
実行後

土日の場合は処理を終了する

サンプルコード
Public Sub execBizDay()
    Dim weekNum As Byte ' 曜日(数値)

    ' 現在の曜日(数値)を取得する
    weekNum = Weekday(Date)

    If weekNum = vbSaturday Or weekNum = vbSunday Then

        ' 土日の場合
        Exit Sub
    End If
    
    ' ... コードを記載
End Sub

最後に

今回は、日付から曜日を取得する方法について解説しました。

セルに書き出す時には文字列を取得し、プログラム上で判定に使用するのであれば数値で取得するのが良いと思います。
用途によって、使い分けていきましょう。

本記事が、皆さんのお力になれば幸いです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA