■ 日付操作関数についてもっと知ろう
あなたがVBAの開発を行っているときに、1か月後の日付が欲しいとか、この日付と日付の間隔を求めたい、と思うことはありませんか? VBAには便利な日付操作の関数がたくさん用意されており、日付や時刻の様々な操作・加工を行うことが可能です。今回は、この日付操作関数について解説します。
シリアル値について
シリアル値とは、整数部に日付データを、小数部に時刻データを割り当てた数値です。VBAの中で日付データは、このシリアル値で記録されています。日付部は、1899年12月31日からの経過日数を、時刻部には1日を1として午前0時からどのくらい時間が経過したかを割り当てています。
日付リテラルについて
コードの中で直接日付を指定する必要がある場合、「#2009/1/31#」のように、「#(シャープ)」で日付の先頭と終わりを囲みます。日付リテラルは、入力後に「#1/31/2009#」(月/日/年)の順番に自動的に並べ替えられます。コードの中で日付を扱う場合、数字による日付や文字列の日付では何かと不便ですし、日付以外のデータとして扱われてしまう危険性があります。日付リテラルを使うことで、プログラムの中で確実に日付データとして認識させることができます。
■Date関数 Year関数 Month関数 Day関数
Date関数は現在の日付を、Year関数 Month関数 Day関数は引数の日付から年、月、日をそれぞれ返します。
[書式]
Date()
引数はありません。
Year(日付)
Month(日付)
Day(日付)
引数の省略はできません。
[使用例]
Sub Test()
Dim MyDate As Date
MyDate = Date
Debug.Print Year(MyDate)
Debug.Print Month(MyDate)
Debug.Print Day(MyDate)
End Sub
コードを実行すると、変数「MyDate」に今日の日付が格納され、年、月、日、がそれぞれイミディエイトウィンドウに出力されます。 |
■Time関数 Hour関数 Minute関数 Second関数
Time関数は現在の時刻を、Hour関数 Minute関数 Second関数は引数の時刻から時、分、秒をそれぞれ返します。
[書式]
Time()
引数はありません。
Hour(時刻)
Minute(時刻)
Second(時刻)
引数の省略はできません。
[使用例]
Sub Test()
Dim MyTime As Date
MyTime = Time
Debug.Print Hour(MyTime)
Debug.Print Minute(MyTime)
Debug.Print Second(MyTime)
End Sub
コードを実行すると、変数「MyTime」に現在の時刻が格納され、時、分、秒、がそれぞれイミディエイトウィンドウに出力されます。 |
■DateAdd関数
日付に指定された時間間隔を追加し、その結果の日付を取得します。負の数を指定することで過去の日付を取得することもできます。
[書式]
DateAdd(interval, number, 日付)
引数の省略はできません。
引数「interval」の主な設定値と内容
yyyy |
年 |
m |
月 |
d |
日 |
ww |
週 |
h |
時 |
n |
分 |
s |
秒 |
引数「number」には、追加する時間間隔を数値で指定します。将来の日付を取得するには正の数を、過去の日付を取得するには負の数を、それぞれ指定します。
[使用例]
Sub Test()
Debug.Print DateAdd("YYYY", 1, #4/1/2009#)
Debug.Print DateAdd("M", 1, #4/1/2009#)
Debug.Print DateAdd("D", 1, #4/1/2009#)
Debug.Print DateAdd("D", -1, #4/1/2009#)
End Sub
コードを実行すると、イミディエイトウィンドウに、
「2010/04/01」
「2009/05/01」
「2009/04/02」
「2009/03/31」
をそれぞれ出力します。 |
■DateDiff関数
指定した2つの日付の間隔を返します。
[書式]
DateDiff(interval, 日付1, 日付2)
引数の省略はできません。
引数「interval」の主な設定値と内容は、DateAdd関数と同じです。
[使用例]
Sub Test()
Debug.Print DateDiff("YYYY", #4/1/2009#, #3/31/2010#)
Debug.Print DateDiff("M", #4/1/2009#, #3/31/2010#)
Debug.Print DateDiff("D", #4/1/2009#, #3/31/2010#)
Debug.Print DateDiff("WW", #4/1/2009#, #3/31/2010#)
End Sub
コードを実行すると、イミディエイトウィンドウに、「1」「11」「364」「52」をそれぞれ出力します。 |
■DatePart関数
日付、時刻から時間単位を取り出します。
[書式]
DatePart(interval, 日付)
引数の省略はできません。
引数「interval」の主な設定値と内容は、DateAdd関数と同じです。
[使用例]
Sub Test()
Debug.Print DatePart("YYYY", #1/31/2009#)
Debug.Print DatePart("M", #1/31/2009#)
Debug.Print DatePart("D", #1/31/2009#)
Debug.Print DatePart("WW", #1/31/2009#)
End Sub
コードを実行すると、イミディエイトウィンドウに、「2009」「1」「31」「5」をそれぞれ出力します。 |
■DateSerial関数 TimeSerial関数
DateSerial関数は、年月日に対応する数値から日付を返します。TimeSerial関数は、時分秒に対応する数値から時刻を返します。
[書式]
DateSerial(年, 月, 日)
TimeSerial(時, 分, 秒)
引数の省略はできません。
[使用例]
Sub Test()
Dim i As Long
For i = 1 To 5
Debug.Print DateSerial(2009 + i, 1, 31) & " " & TimeSerial(9 + i, 0, 0)
Next i
End Sub
コードを実行すると、イミディエイトウィンドウに、
「2010/01/31 10:00:00」
「2011/01/31 11:00:00」
「2012/01/31 12:00:00」
「2013/01/31 13:00:00」
「2014/01/31 14:00:00」
をそれぞれ出力します。 |
■DateValue関数 TimeValue関数
DateValue関数は、日付を表す文字列から日付を返します。TimeValue関数は、時刻を表す文字列から時刻を返します。
[書式]
DateValue(日付)
TimeValue(時刻)
引数の省略はできません。
[使用例]
Sub Test()
Debug.Print DateValue("2009/1/1")
Debug.Print TimeValue("11:59:59")
End Sub
コードを実行すると、イミディエイトウィンドウに、「2009/01/01」「11:59:59」を、それぞれ出力します。 |
■Timer関数
午前0時からの経過時間を返します。
[書式]
Timer()
引数はありません。
[使用例]
Sub Test()
Dim MyTime As Single
MyTime = Timer
MsgBox "OKボタンを押してください"
Debug.Print "OKボタンを押すまでに" & Timer - MyTime & "秒かかりました"
End Sub
コードを実行すると、メッセージボックスが表示されます。[OK]ボタンをクリックすると、イミディエイトウィンドウに[OK]ボタンをクリックするまでにかかった秒数を出力します。
「MyTime = Timer」で変数「MyTime」に現在の経過時間を格納しました。「Timer - MyTime」で現在の経過時間から、先ほど格納した経過時間を引いています。そのため、コードの3行目が処理されてから5行目が処理されるまでにかかった秒数が出力されました。 |
■Weekday関数 WeekdayName関数
Weekday関数は、指定された日付の曜日を返します。WeekdayName関数は、指定された曜日を表す曜日名を返します。
[書式]
Weekday(日付)
Weekday(曜日を表す数値)
引数の省略はできません。
[使用例]
Sub Test()
Debug.Print Weekday(Date)
Debug.Print WeekdayName(Weekday(Date))
End Sub
コードを実行すると、今日の日付の曜日を表す数値と曜日名をイミディエイトウィンドウに出力します。例えば今日が水曜日なら、「4」「水曜日」と出力されます。 |
■Now関数
Now関数は、現在の日付と時刻を返します。
[書式]
Now()
引数はありません。
[使用例]
Sub Test()
Debug.Print Now
End Sub
コードを実行すると、「20XX/XX/XX XX:XX:XX」と現在の日付と時刻がイミディエイトウィンドウに出力されます。 |
以上、日付操作関連の関数について紹介しました。
なお、引数に関しては代表的なものだけを解説してあります。
プログラムの中で日付を操作する必要があるとき、これらの日付操作関数を利用することで、より正確で効率的な記述を行うことが可能です。
ぜひ、マスターしてください。
|