ここでは、VBAで使われる代表的な「日付/時刻」の演算に関する組み込み関数を紹介します。イミディエイトウィンドウを使っていろいろ動作確認してみましょう。
Now関数、Date関数、Time関数 |
それぞれ、”現在日時”、”現在日付”、”現在時刻”を取得します。
?Now
2009/05/05 6:54:19
?Date
2009/05/05
?Time
6:54:22
- これらの関数では、関数名の次のカッコを省略できます。
|
Year関数、Month関数、Day関数 |
それぞれ、日時から”年だけ”、”月だけ”、”日だけ”を取り出します。
?Year(#2009/05/05 12:34:56#)
2009
?Month(#2009/05/05 12:34:56#)
5
?Day(#2009/05/05 12:34:56#)
5
- 同様にして、時刻から”時だけ”、”分だけ”、”秒だけ”を取り出し関数として、Hour関数、Minute関数、Second関数があります。
|
DateAdd関数 |
日時に加減算を行ないます。
?DateAdd("yyyy", -1, #2009/05/05#)
2008/05/05
?DateAdd("yyyy", 1, #2009/05/05#)
2010/05/05
?DateAdd("d", 100, #2009/05/05#)
2009/08/13
?DateAdd("m", 2, #2009/05/05#)
2009/07/05
- 上記の例では、それぞれ、1年前、1年後、100日後、2ヶ月後の日付を求めています。
- この関数では、3番目の引数に日付や時刻を、2番目の引数に増減する量を指定します。そして、1番目の引数には、加減算する日時の基準単位を上記のような文字列として指定します。
- この関数では、月末の日付も考慮されます。たとえば5月31日の1日後は翌月6月1日が返されます。
|
DateDiff関数 |
2つの日時の間隔を求めます。
?DateDiff("yyyy", #2007/05/05#, #2009/05/05#)
2
?DateDiff("yyyy", #2009/05/05#, #2007/05/05#)
-2
?DateDiff("m", #2009/02/05#, #2009/05/05#)
3
?DateDiff("d", #2009/01/01#, #2009/05/05#)
124
- 1番目の引数に指定した日時の単位で、2つの日時の間隔を求めます。1番目の引数に指定する文字列はDateAdd関数と同じです。
|
DateSerial関数 |
年・月・日の3要素から日付を組み立てます。
?DateSerial(2009, 5, 1)
2009/05/01
?DateSerial(2009+1, 5+1, 1+1)
2010/06/02
?DateSerial(Year(Date), Month(Date), Day(Date)+4)
2009/05/09
?DateSerial(Year(Date), Month(Date), 1)
2009/05/01
?DateAdd("d", -1, DateAdd("m", 1, DateSerial(Year(Date),
Month(Date), 1)))
2009/05/31
?DateSerial(Year(Date), Month(Date)+1, 1)
2009/06/01
?DateAdd("m", 1, DateSerial(Year(Date), Month(Date), 1))
2009/06/01
- この関数では、引数に年・月・日を別々に指定することで、それらを組み合わせた日付を求めることができます。各引数には計算値を指定できることが特徴です。
- 1番目の例では、単純に2009年5月5日の日付を組み立てています。
- 2番目の例では、2009年5月5日に対して、1年+1ヶ月+1日後の日付を組み立てています。
- 3番目の例では、現在日付の4日後の日付を組み立てています。
- 4番目の例では、今月の1日の日付を組み立てています。
- 5番目の例では、今月の末日の日付を組み立てています。1ヶ月の日数は28日〜31日と、月ごとに異なります。そこで、今月1日の日付をもとに翌月の1日の日付を求め、その1日前の日付を調べることによってそれを今月の最終日とします。翌月の最終日を今月の最終日の1ヶ月後と考えると間違った結果になりますので注意が必要です。例えば、9月30日の1ヶ月後の10月30日は10月の最終日ではありません。
- 6番目と7番目の例では、翌月の1日の日付を組み立てています。
|
Format関数 |
日時を書式化します。
?Format(#2009/05/05 12:34:56#, "yyyy/mm/dd")
2009/05/05
?Format(#2009/05/05 12:34:56#, "yyyy年m月d日(aaa)")
2009年5月5日(火)
?Format(#2009/05/05 12:34:56#, "ggg e年m月d日(aaaa)")
平成 21年5月5日(火曜日)
?Format(#2009/05/05 12:34:56#, "oooo d日")
5月 5日
この関数の2番目の引数に指定する書式には、主に次のようなものがあります。
yy |
年の下2桁 |
|
g |
年号の1文字の英字 |
yyyy |
年の4桁 |
gg |
年号の1文字の漢字 |
m |
月(1桁の場合はそのまま) |
ggg |
年号の漢字 |
mm |
月(1桁の場合は先頭に0) |
e |
和暦の年(1桁の場合はそのまま) |
d |
日(1桁の場合はそのまま) |
ee |
和暦の年(1桁の場合は先頭に0) |
dd |
日(1桁の場合は先頭に0) |
oooo |
日本語の月名 |
aaa |
曜日の省略形 |
AM/PM |
午前/午後を"AM"または"PM"で表示 |
aaaa |
曜日 |
am/pm |
午前/午後を"am"または"pm"で表示 |
h |
時(1桁の場合はそのまま) |
A/P |
午前/午後を"A"または"P"で表示 |
hh |
時(1桁の場合は先頭に0) |
a/p |
午前/午後を"a"または"p"で表示 |
n |
分(1桁の場合はそのまま) |
q |
第何四半期かを表す数値(1〜4) |
nn |
分(1桁の場合は先頭に0) |
w |
曜日を表す数値(日曜が1、月曜が2) |
s |
秒(1桁の場合はそのまま) |
ww |
1年の何週目に当たるかを表示 |
ss |
秒(1桁の場合は先頭に0) |
y |
1年の何日目に当たるかを表示 |
|
|