25 September, 2020

Excel VBAプログラミング教学:日付と時刻(DateとTimes)

次にはExcel VBAの時間変数と関連関数の使用方法を説明し、実例を挙げます。

日付と時刻は特別なデータ種類ですが、よく使われます。VBAでは、Dateのように特別な変数を使用し、日付と時刻のデータを格納できます。さらに、VBAには多くの日付と時刻を処理するためのツール関数が内蔵されます。以下は、VBAで日付と時刻に関連する変数と関数の使用方法です。

日付と時刻の初期化

VBAのDate変数は、日付と時刻を格納するために使用されます。DateValueを使用し、日付が設定できます。

'日付変数を宣言する
Dim d As Date
' 日付を設定する
d = DateValue("Jun 19, 2017")
' 日付を出力する
MsgBox ("Date: " & d)
VBA日付の処理する

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 或 vbShortTime24時間形式で時刻を表示する。

次には各種類の実例です。

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))

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です