次にはExcel VBAの時間変数と関連関数の使用方法を説明し、実例を挙げます。
日付と時刻は特別なデータ種類ですが、よく使われます。VBAでは、Dateのように特別な変数を使用し、日付と時刻のデータを格納できます。さらに、VBAには多くの日付と時刻を処理するためのツール関数が内蔵されます。以下は、VBAで日付と時刻に関連する変数と関数の使用方法です。
目次
日付と時刻の初期化
VBAのDate変数は、日付と時刻を格納するために使用されます。DateValueを使用し、日付が設定できます。
'日付変数を宣言する
Dim d As Date
' 日付を設定する
d = DateValue("Jun 19, 2017")
' 日付を出力する
MsgBox ("Date: " & d)
DateValueは多種類の日付の形式に対応できます。以下は常用の例です。
' 各種類の日付を設定する方法
d = DateValue("2017/01/19")
d = DateValue("2017-01-19")
d = DateValue("19-JAN")
d = DateValue("19-JAN-2017")
d = DateValue("01/19/2017")
一般的な文字列も直接指定できます。
d = "Jun 19, 2017"
DateSerialは、年月日の数値に対応でき、日付変数を作成します。
Dim d As Date
d = DateSerial(2016, 5, 10)
MsgBox (d)
時刻を設定する場合はTimeValue関数とTimeSerial関数を使用できます。
Dim t As Date
t = TimeValue("20:15")
MsgBox (t)
t = TimeSerial(20, 15, 20)
MsgBox (t)
CDate関数は、日付と時刻を初期化できます。
Dim d As Date
' 日付と時刻を設定する
d = CDate("15/08/2013 8:25:00 PM")
MsgBox (d)
一般的な文字列も指定できます。
' 日付と時刻を設定する
d = "15/08/2013 8:25:00 PM"
MsgBox (d)
現時点の日付と時刻
Date関数は現時点の日付を取得でき、Time関数は現時点の時刻を返し、Now関数は現時点の日付と時刻を返します。
Dim d As Date
' 現時点の日付
d = Date
MsgBox ("今は:" & d)
' 現時点の時刻
d = Time()
MsgBox ("今は:" & d)
' 現時点の日付と時刻
d = Now()
MsgBox ("今は:" & d)
Timer関数は、当日の午前12:00から現時点までの秒数を1000分の1秒の精度で返すことができます。
MsgBox ("Timer is: " & Timer())
日付と時刻であるかどうかを判断する
IsDate関数は、入力データが正しい日付と時刻であるかどうかを判別できます。
' True
MsgBox (IsDate("2017/5/21"))
' False
MsgBox (IsDate("123456789"))
日付と時刻の演算
DateAddは、日付と時刻を加算し、特定な期間の後の時点を演算できます。
Dim d As Date
d = "01-Jan-2013"
MsgBox ("一年後:" & DateAdd("yyyy", 1, d))
MsgBox ("一季後:" & DateAdd("q", 1, d))
MsgBox ("一ヶ月後:" & DateAdd("m", 1, d))
MsgBox ("翌日:" & DateAdd("d", 1, d))
MsgBox ("一週間後:" & DateAdd("ww", 1, d))
d = "01-Jan-2013 12:00:00"
MsgBox ("一時間後:" & DateAdd("h", 1, d))
MsgBox ("一分間後:" & DateAdd("n", 1, d))
MsgBox ("次の秒:" & DateAdd("s", 1, d))
加算と負の数値を連携して使用すると、日付と時刻が減算でき、特定な期間の前の時点を演算できます。
Dim d As Date
d = "01-Jan-2013"
MsgBox ("一年前:" & DateAdd("yyyy", -1, d))
MsgBox ("一季前:" & DateAdd("q", -1, d))
MsgBox ("一月前:" & DateAdd("m", -1, d))
MsgBox ("一天前:" & DateAdd("d", -1, d))
MsgBox ("一週前:" & DateAdd("ww", -1, d))
d = "01-Jan-2013 12:00:00"
MsgBox ("一小時前:" & DateAdd("h", -1, d))
MsgBox ("一分鐘前:" & DateAdd("n", -1, d))
MsgBox ("一秒鐘前:" & DateAdd("s", -1, d))
2つの日時の間隔を計算する場合は、DateDiff関数を使用します。
Dim d1, d2 As Date
d1 = "2017/10/02"
d2 = "2018/11/14"
MsgBox ("年の間隔: " & DateDiff("yyyy", d1, d2))
MsgBox ("季の間隔: " & DateDiff("q", d1, d2))
MsgBox ("月の間隔: " & DateDiff("m", d1, d2))
MsgBox ("日の間隔: " & DateDiff("d", d1, d2))
MsgBox ("週の間隔: " & DateDiff("ww", d1, d2))
d1 = "01-Jan-09 00:00:00"
d2 = "01-Jan-10 23:59:00"
MsgBox ("時の間隔: " & DateDiff("h", d1, d2))
MsgBox ("分の間隔: " & DateDiff("n", d1, d2))
MsgBox ("秒の間隔 : " & DateDiff("s", d1, d2))
日付と時刻を出力する
一部の日付と時刻を引き出します
Year、Month、Day と Weekdayは日付の年月日または何曜日を判断できます。
Dim d As Date
d = Date
' 年月日と曜日を引き出す
MsgBox ("年: " & Year(d))
MsgBox ("月: " & Month(d))
MsgBox ("日: " & Day(d))
MsgBox ("曜日: " & Weekday(d))
Weekday関数を使用すれば、1から7の整数を返し、日曜日から土曜日に対応します。指定した曜日の名前を知りたい場合は、WeekdayNameを使用し、変換できます。
Dim d As Date
Dim wdn As String
d = Date
' 曜日の名前
wdn = WeekdayName(Weekday(d))
' 出力
MsgBox (wdn)
月の名前は同じやり方で、MonthName関数を使用して変換します。
Dim d As Date
Dim mn As String
d = Date
' 月の名前
mn = MonthName(Month(d))
' 出力
MsgBox (mn)
時刻ならHour関数、Minute関数 と Second関数を使用できます。やり方が似てます。
MsgBox ("時:" & Hour(Now))
MsgBox ("分:" & Minute(Now))
MsgBox ("秒:" & Second(Now))
DatePartは、日時から指定した単位の数値を取り出す多機能関数です。
MsgBox ("年:" & DatePart("yyyy", Now))
MsgBox ("月:" & DatePart("m", Now))
MsgBox ("日:" & DatePart("d", Now))
MsgBox ("曜日:" & DatePart("w", Now))
MsgBox ("週:" & DatePart("ww", Now))
MsgBox ("季:" & DatePart("q", Now))
MsgBox ("時:" & DatePart("h", Now))
MsgBox ("分:" & DatePart("n", Now))
MsgBox ("秒:" & DatePart("s", Now))
出力形式
FormatDateTime関数は日付または時刻として書式設定された式を返せます。出力形式は次の定数を指定できます。
定数 | 内容 |
0或 vbGeneralDate | 日付か時刻、または両方を表示する。 |
1 或 vbLongDate | [地域のプロパティ]ダイアログボックスで指定されている長い形式で日付を表示する。 |
2 或 vbShortDate | [地域のプロパティ]ダイアログボックスで指定されている短い形式で日付を表示する。 |
3 或 vbLongTime | [地域のプロパティ]ダイアログボックスで指定されている形式で時刻を表示する。 |
4 或 vbShortTime | 24時間形式で時刻を表示する。 |
次には各種類の実例です。
Dim d As Date
d = ("2013-08-15 20:25")
' 2013/8/15 午後 08:25:00
MsgBox (FormatDateTime(d))
MsgBox (FormatDateTime(d, 0))
MsgBox (FormatDateTime(d, vbGeneralDate))
' 2013年8月15日
MsgBox (FormatDateTime(d, 1))
MsgBox (FormatDateTime(d, vbLongDate))
' 2013/8/15
MsgBox (FormatDateTime(d, 2))
MsgBox (FormatDateTime(d, vbShortDate))
' 午後 08:25:00
MsgBox (FormatDateTime(d, 3))
MsgBox (FormatDateTime(d, vbLongTime))
' 20:25
MsgBox (FormatDateTime(d, 4))
MsgBox (FormatDateTime(d, vbShortTime))
コメントを残す