サイトについて      連絡先   検索

VBA 日付を操作する

はじめに

Excel VBA マクロの日付 (Date) を操作する方法を紹介します。

日付や時刻の入力方法から計算の仕方、年月日や時分秒の取得や日付が範囲内にあるのか判定する方法などを紹介します。

  • 目次
    • 日付型
    • 計算する
    • 取得する
    • 比較する

日付型

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

型名 データ型 値の例や範囲
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

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

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


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

計算する

演算子」の+-を使用します。

演算子 演算名 使用例 結果
+足し算2013/01/01 + 12013/01/02
-引き算2013/01/01 - 12012/12/31

Dim d As Date

d = CDate("2013/1/1") + 1
Debug.Print (d) ' 2013/01/02

d = CDate("2013/1/1") - 1
Debug.Print (d) ' 2012/12/31

数値の 1 が 1 日として加えられます。

小数は時刻になります。1 をその時間で割った値を加えます。


Dim d As Date

d = CDate("2013/1/1") + (1 / 24)           ' 1 時間
Debug.Print (d) ' 2013/01/01 1:00:00

d = CDate("2013/1/1") + (1 / 24 / 60)      ' 1 分
Debug.Print (d) ' 2013/01/01 0:01:00

d = CDate("2013/1/1") + (1 / 24 / 60 / 60) ' 1 秒
Debug.Print (d) ' 2013/01/01 0:00:01

DateAdd 関数」を使用して、年月日、時分秒を指定して計算できます。

引数には(単位, 加算時間, 日時)を渡します。単位には次のものがあります。


Dim d As Date

d = DateAdd("yyyy", 1, CDate("2013/1/1")) ' 1 年後
Debug.Print (d) ' 2014/01/01

d = DateAdd("d", -1, CDate("2013/1/1"))   ' 前の日
Debug.Print (d) ' 2012/12/31

d = DateAdd("h", 1, CDate("2013/1/1"))    ' 1 時間後
Debug.Print (d) ' 2013/01/01 1:00:00

取得する

年月日を取得するには「Year 関数」、「Month 関数」、「Day 関数」を使用します。

時分秒を取得するには「Hour 関数」、「Minute 関数」、「Second 関数」を使用します。

日付の曜日を取得するには「Weekday 関数」、「WeekdayName 関数」を使用します。


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  

Debug.Print (Weekday(d)) ' 4
Debug.Print (WeekdayName(Weekday(d))) ' 水曜日

現在の日付、日時、時刻を取得するには「Date 関数」、「Now 関数」、「Time 関数」を使用します。


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

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

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


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

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

比較する

日付を比較するには「演算子」の=<>を使用します。

演算子 演算名 使用例 結果
=等しい1 = 2False
<>等しくない1 <> 2True
>大きい1 > 2False
<小さい1 < 2True
>=以上1 >= 2False
<=以下1 <= 2True

Dim d1 As Date
d1 = "2013/1/1"

Dim d2 As Date
d2 = "2013/1/2"

If d1 < d2 Then
    Debug.Print ("d1 が小さい")
End If

指定した日時の範囲内にあるかチェックしたいときは、次のようにします。


Dim 対象日時 As Date
対象日時 = Now ' 調べたい日付

Dim 開始日時 As Date
開始日時 = "2013/1/1"

Dim 終了日時 As Date
終了日時 = "2013/1/31 23:59:59"

' 範囲内かチェックする
If (開始日時 <= 対象日時) And (対象日時 <= 終了日時) Then
    Debug.Print ("範囲内")
End If
  • 目次
    • 日付型
    • 計算する
    • 取得する
    • 比較する