VBA 日付を入力する

はじめに

Excel VBA マクロの日付 (Date) を入力や取得する方法を紹介します。

#月/日/年 時:分:秒# のようにして、日付を入力できます。

年/月/日 時:分:秒 形式の文字列を日付型 (Date) に代入して、日付に変換できます。

Date 関数」、「Now 関数」、「Time 関数」から、今日の日付、日時、時刻を取得できます。

Year 関数Month 関数Day 関数」から、年月日を取得できます。

Hour 関数Minute 関数Second 関数」から、時分秒を取得できます。

  • 目次
    • 日付型について
    • 日付や時刻を入力する
    • 日付や時刻を取得する

日付型について

日付型は日付と時刻の両方を扱えます。

型名 データ型 値の例や範囲
Date日付型西暦100年1月1日 ~ 西暦9999年12月31日 の日付と時刻

日付や時刻を入力する

#月/日/年 時:分:秒# のように入力します。# で囲むと日付になります。

Dim 日付 As Date
日付 = #3/30/2013# ' 月/日/年
Debug.Print(日付) ' 2013/03/30

Dim 時刻 As Date
時刻 = #1:02:03 AM# ' 時:分:秒
Debug.Print(時刻) ' 1:02:03

Dim 日付と時刻 As Date
日付と時刻 = #3/30/2013 1:02:03 AM# ' 月/日/年 時:分:秒
Debug.Print(日付と時刻) ' 2013/03/30 1:02:03

#24:00:00# のような、24 時間を超える時間は入力できません。下記の「数値から入力」から「TimeSerial 関数」を使用して入力できます。

年月日の順になっていないのでわかりづらいです。

文字列から入力

文字列で 年/月/日 時:分:秒 形式の値を日付型 (Date) に代入すると、自動で日付型に変換できます。

Dim 日付 As Date
日付 = "2013/3/30"  
Debug.Print(日付) ' 2013/03/30

Dim 時刻 As Date
時刻 = "1:2:3"  
Debug.Print(時刻) ' 1:02:03

Dim 日付と時刻 As Date
日付と時刻 = "2013/3/30 1:2:3"  
Debug.Print(日付と時刻) ' 2013/03/30 1:02:03

CDate 関数」を使用して、文字列を日付に変換できます。

Dim 日付 As Date
日付 = CDate("2013/3/30")
Debug.Print(日付) ' 2013/03/30

Dim 時刻 As Date
時刻 = CDate("1:2:3")
Debug.Print(時刻) ' 1:02:03

Dim 日付と時刻 As Date
日付と時刻 = CDate("2013/3/30 1:2:3")
Debug.Print(日付と時刻) ' 2013/03/30 1:02:03
詳しくは「文字列を変換する」をご覧ください。

数値から入力

DateSerial 関数」を使用して、年月日から日付を入力できます。

Dim d As Date
d = DateSerial(2000, 12, 31)
Debug.Print(d) ' 2000/12/31

TimeSerial 関数」を使用して、時分秒から時刻を入力できます。

Dim d As Date
d = TimeSerial(1, 2, 3)
Debug.Print(d) ' 1:02:03

d = TimeSerial(24, 2, 3)
Debug.Print(d) ' 1899/12/31 0:02:03
Dim d As Date
d = DateSerial(2000, 12, 31) + TimeSerial(1, 2, 3)
Debug.Print(d) ' 2000/12/31 1:02:03
詳しくは「数値を変換する」をご覧ください。

日付や時刻を取得する

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

Hour 関数Minute 関数Second 関数」を使用して、時分秒を取得できます。

Dim d As Date
d = "2013/1/2 3:4:5"

Debug.Print(Year(d))    ' 2013
Debug.Print(Month(d))   ' 1
Debug.Print(Day(d))     ' 2

Debug.Print(Hour(d))    ' 3
Debug.Print(Minute(d))  ' 4
Debug.Print(Second(d))  ' 5  

Date 関数」、「Now 関数」、「Time 関数」を使用して、今日の日付、日時、時刻を取得できます。

Debug.Print(Date) ' 2013/01/15
Debug.Print(Now)  ' 2013/01/15 9:23:45
Debug.Print(Time) ' 9:23:45

DateValue 関数」、「TimeValue 関数」を使用して、日時から日付や時刻を取得できます。

Dim d As Date
d = "2013/1/2 3:4:5"

Debug.Print(DateValue(d)) ' 2013/01/02
Debug.Print(TimeValue(d)) ' 3:04:05

曜日

Weekday 関数」、「WeekdayName 関数」を使用して、日付の曜日や曜日の名前を取得できます。

Dim d As Date
d = "2013/1/6"
Debug.Print(Weekday(d)) ' 1
Debug.Print(WeekdayName(Weekday(d))) ' 日曜日

d = "2013/1/12"
Debug.Print(Weekday(d)) ' 7
Debug.Print(WeekdayName(Weekday(d))) ' 土曜日

1 日や月末

Excel の「日付を自動で入力する」の方法で、1 日や月末など好きな日付を取得できます。

Excel の関数を使用するには「WorksheetFunction」をご覧ください。
Dim 対象 As Date
対象 = "2013/1/15"

Dim d As Date

' 1 日
d = DateSerial(Year(対象), Month(対象), 1)
Debug.Print(d) ' 2013/01/01

' 月末
d = WorksheetFunction.EoMonth(対象, 0)
Debug.Print(d) ' 2013/01/31

日付の期間

DateDiff 関数」を使用して、2 つの日付の期間を取得できます。

引数には (単位, 日時1, 日時2) を指定します。単位には次のものがあります。

  • yyyy:年
  • m:月
  • d:日
  • h:時
  • n:分
  • s:秒
  • w:平日
  • ww:週
  • q:四半期
Dim i As Integer

i = DateDiff("yyyy", CDate("2013/1/1"), CDate("2014/12/31"))    ' 年
Debug.Print(i) ' 1

i = DateDiff("d", CDate("2013/1/1"), CDate("2013/1/7"))         ' 日
Debug.Print(i) ' 6

i = DateDiff("h", CDate("2013/1/1"), CDate("2013/1/1 1:00:00")) ' 時
Debug.Print(i) ' 1