VBA DateValue 関数:日時から日付を取得する

はじめに

Excel VBA マクロの DateValue 関数から日時から日付を取得する方法を紹介します。

DateValue 関数は、指定した日時の日付を返します。

2013/01/02 3:04:05 なら 2013/01/02 の日付を取得できます。

日時から日付の部分を取得したいときに使用します。

日時から時間を取得するには「TimeValue 関数」を使用します。
日付を入力や取得するには「日付を入力する」をご覧ください。
  • 目次
    • DateValue 関数の引数と戻り値
    • 解説
    • 使用例

DateValue 関数の引数と戻り値

DateValue(日時)
日時から日付を取得します。

引数「日時」日時を指定します。
戻り値の型日付型 (Date)

解説

引数「日時」が 2013/01/02 3:04:05 なら、2013/01/02 の日付を返します。

引数「日時」が文字列で、年が 2 桁なら 0 ~ 492000 ~ 2049 年50 ~ 991950 ~ 1999 年 になります。Windows のバージョンによって変わります。

引数「日時」が 3:04:05 なら、日付型の初期値 1899/12/30 の日付を返します。

日付型の範囲は 西暦100年1月1日 ~ 西暦9999年12月31日 です。これを超えるときは「エラー 13 型が一致しません。」が発生します。

使用例

DateValue 関数の使用例を紹介します。

日時から日付を取得する

日時から日付を取得します。

Dim d As Date

d = DateValue("2013/1/2 3:4:5")
Debug.Print(d) ' 2013/01/02

d = DateValue("2013年1月2日 3時4分5秒")
Debug.Print(d) ' 2013/01/02

d = DateValue("1:2:3")
Debug.Print(d) ' 0:00:00、日付が 1899/12/30 のときは時刻だけ表示

d = DateValue("1時2分3秒")
Debug.Print(d) ' 0:00:00、日付が 1899/12/30 のときは時刻だけ表示

d = DateValue("2013/1/2")
Debug.Print(d) ' 2013/01/02、全角は取得できる

Debug.Print(DateValue(0))              ' エラー、CDate 関数なら変換できる

Debug.Print(DateValue("24:00:00"))     ' エラー、24 時間を超える時刻は変換できない

Debug.Print(DateValue("一月三十一日")) ' エラー、漢数字は変換できない

年月日を取得する

Year 関数Month 関数Day 関数」を使用して、年月日を取得できます。

DimAs Integer
DimAs Integer
DimAs Integer
年 = Year(Now)  ' 年
月 = Month(Now) ' 月
日 = Day(Now)   ' 日

Dim d As Date
d = DateSerial(年, 月, 日)
Debug.Print(d) ' 今日の日付

現在の日付を取得する

Date 関数」を使用して、現在の日付を取得できます。

Dim d As Date

d = Now
Debug.Print(d) ' 2013/01/02 3:04:05

d = Date
Debug.Print(d) ' 2013/01/02

d = Time
Debug.Print(d) ' 3:04:05