HOME > エクセルVBA >VBA関数(日付・時刻に関する関数)

VBA関数(日付・時刻に関する関数)

 エクセルで関数と言えば通常はセルに入力するワークシート関数のことですが、VBAにも関数があります。ワークシート関数と同様に日付や文字列などを操作することができます。このページでは日付や時刻に関する関数を説明していきます。

システムの日付を返す関数

日付と時刻から必要な情報の取出し

その他の日付・時刻に関する便利な関数

システムの日付を返す関数

Date関数、Time関数、Now関数

 システムが認識している日付を返すことができる関数群です。日にちを返すDate関数、時間を返すTime関数、日付と時間を返すNow関数があります。日付関係の値を返すので変数に代入するときはDate型にします。

Sub date_time_now()


Dim I_date As Date
Dim I_time As Date
Dim I_now As Date


I_date = Date
I_time = Time
I_now = Now


MsgBox "今日は" & I_date & "です。" & vbNewLine & "現在の時刻は" & I_time & "です。" & vbNewLine & "現在は" & I_now & "です。"


End Sub

Date関数、Time関数、Now関数

 ユーザーフォームを実行させてみましょう。上から現在の日付、時刻、日付と時刻が表示されます。

 表示形式はシステムの表示形式に従っているので「コントロールパネル」-「地域と言語」で変更することができます。

Date関数、Time関数、Now関数

 システムの地域と言語のダイアログです。エクセルVBAで反映されるのは日付(短い形式)と時刻長い形式が反映されています。ココの表示形式を変更することでVBAで表示される日付や時刻の表示を変更させることができます。

▲TOPへ移動

日付と時刻から必要な情報の取出し

Year関数、Month関数、Day関数

 任意の日付からYear関数は「年」を、Month関数は「月」を、Day関数は「日」を取り出すことができます。

Sub date_y_m_d()


Dim I_year As Integer
Dim I_month As Integer
Dim I_day As Integer


I_year = Year(Now)
I_month = Month(Now)
I_day = Day(Now)


MsgBox "今年は" & I_year & "年です。" & vbNewLine & "今月は" & I_month & "月です。" & vbNewLine & "今日は" & I_day & "日です。"


End Sub

Year関数、Month関数、Day関数

Year関数は西暦で、Month関数は1〜12の整数、Day関数は1〜31の整数を返します。

Hour関数、Minute関数、Second関数

 任意の時刻からHour関数は「時」を、Minute関数は「分」を、Second関数は「秒」を取り出すことができます。

Sub date_h_m_s()


Dim I_hour As Integer
Dim I_minute As Integer
Dim I_second As Integer


I_hour = Hour(Now)
I_minute = Minute(Now)
I_second = Second(Now)


MsgBox "現在の時間は" & I_hour & "時です。" & vbNewLine & "現在の分は" & I_minute & "分です。" & vbNewLine & "現在の秒は" & I_second & "秒です。"


End Sub

Hour関数、Minute関数、Second関数

Hour関数は1〜23の整数、、Minuteh関数は1〜59の整数、Second関数は1〜59の整数を返します。

▲TOPへ移動

その他の日付・時刻に関する便利な関数

Timer関数

 Timer関数は午前0時から経過した秒数を数値(単精度小数点型)で返す関数です。使い方はマクロの処理時間を計測したり、一定時間処理を繰り返す場合に利用します。ゲームを作成する場合などに多用するVBA関数です。

処理時間の計測

Sub timer_1()


Dim I_timer As Single


I_timer = Timer


MsgBox ("表示")
MsgBox ("処理時間:" & Timer - I_timer & "秒")


End Sub

Timer関数  Timer関数

 上記マクロを実行した場合、プログラムが起動し、MsgBoxに「表示」と表示され、「OK」ボタンを押すまでの時間が表示されます。

経過時間の表示

Sub timer_2()


Dim I_timer As Single


MsgBox ("OK押してスタート!!")
I_timer = Timer


 Do While Timer < I_timer + 5
 DoEvents
 Loop


MsgBox ("5秒経過")


End Sub

Timer関数 Timer関数

 上記マクロを実行した場合、「OK」を押してから5秒後に「5秒経過」のMsgBoxが表示されます。

DateAdd関数

 DateAdd関数は任意の日付や時間から特定の間隔(日数や時間)を追加した値を返します。1週間後の日付や1年前の日付などを表示させることができます。

引数Intervalに指定できる間隔は次の10種類です。

構文 Dateadd(interval, number, 基準日時)

設定値 内容
yyyy
q 四半期
m
y 年間通算日
d
w 週日
ww
h
n
s
 Dateadd関数を利用するときにはinterval(時間間隔)number(加減時間)、基準日時を引数を入力する必要があります。

 「interval(時間間隔)」は左の表の設定値を入力します。

 「number(加減時間」は未来ならプラス、過去ならマイナスで入力します。「基準日時」は時間間隔を加減する基準となる日時になります。

Sub I_dateadd()


Dim I_dateadd_1 As Date, I_dateadd_2 As Date


I_dateadd_1 = DateAdd("d", 5, Date)
I_dateadd_2 = DateAdd("h", -5, Time)


MsgBox "今日から5日後は" & I_dateadd_1 & "です。" & vbNewLine & "今から5時間前は" & I_dateadd_2 & "です。"


End Sub

DateAdd関数

DateDiff関数

 DateDiff関数は二つの指定した日時あるいは時間の間隔を返す関数です。今年に入って何日経ったとか、オリンピック開幕まで何日として使用することができます。

構文 DateDiff(interval,日時1,日時2,週の始まり曜日,年の開始週)

定数 内容
vbUseSystem 0 APIの設定値を使います
vbSunday 1 日曜(規定値)
vbMonday 2 月曜
vbTuesday 3 火曜
vbWednesday 4 水曜
vbThursday 5 木曜
vbFriday 6 金曜
vbSaturday 7 土曜
 「interval(時間間隔)」は「日時1」と「日時2」の間隔を計算する単位を指定します。Dateadd関数の時に紹介した設定値を入力します。

 「日時1」と「日時2」にはそれぞれ任意の日時を設定します。「週の始まり曜日」は1週間の始まり曜日を設定します。省略することができます。

 「年の開始週」は年度の第一週を指定します。省略することができます。
設定値 内容
yyyy
q 四半期
m
y 年間通算日
d
w 週日
ww
h
n
s

DatePart関数

 DatePart関数は日付・時刻から指定した部分の値を取り出すことができます。引数の省略はできません。引数「interval」の設定値と内容は、DateAdd関数といっしょです。

構文 DatePart(interval, 日付)

設定値 内容
yyyy
q 四半期
m
y 年間通算日
d
w 週日
ww
h
n
s
Sub I_DatePart()

 MsgBox DatePart("YYYY", Now) & vbNewLine & _
 DatePart("M", Now) & vbNewLine & _
 DatePart("D", Now) & vbNewLine

End Sub

DatePart関数  上記のコードを実行してみましょう。メッセージボックスに年、月、日が別々に表記されます。

DateSerial関数、TimeSerial関数

DateSerial関数は引数に指定した(年、月、日)に対応する日付を返します。TimeSerial関数は引数に指定した(時、分、秒)に対する数値から時刻を返します。

構文 DateSerial(年, 月, 日)
構文 TimeSerial(時, 分, 秒)
*引数は省略することができません。

Sub I_Serial()


Dim I_aa As Long


I_aa = 1


MsgBox DateSerial(2013 + I_aa, 3, 23) & " " & TimeSerial(12 + I_aa, 0, 0) & vbNewLine & _


DateSerial(2013 + I_aa + 1, 3, 23) & " " & TimeSerial(12 + I_aa + 1, 0, 0) & vbNewLine & _


DateSerial(2013 + I_aa + 2, 3, 23) & " " & TimeSerial(12 + I_aa + 2, 0, 0) & vbNewLine & _


DateSerial(2013 + I_aa + 3, 3, 23) & " " & TimeSerial(12 + I_aa + 3, 0, 0)


End Sub

DateSerial関数、TimeSerial関数

DateValue関数、TimeValue関数

 DateValue関数は日付を表している文字列から日付を返します。TimeValue関数は時刻を表す文字列から時刻を返します。

構文 DateValue(日付)
構文 TimeValue(時刻)
*引数は省略することができません。

Sub I_Value()


MsgBox DateValue("2013/3/23") & vbNewLine & TimeValue("12:50:35")


End Sub

DateValue関数、TimeValue関数

Weekday関数、WeekdayName関数

 Weekday関数は指定した日付の曜日を返します。また、WeekdayName関数は指定された曜日名を返します。

構文 Weekday(日付)
構文 Weekday(曜日を表す数値)
*引数の省略はできません。
*曜日を表す数値は規定値では日曜日が1で、月曜日が2・・・土曜日が7になります。

Sub I_Weekday()


MsgBox Weekday(Date) & vbNewLine & WeekdayName(Weekday(Date))


End Sub

Weekday関数、WeekdayName関数

 このコードを実行したのが2013年3月23日の土曜日なので、 WeekDay関数で土曜日に該当する数値「7」が返されています。

 WeekDayName関数では引数にWeekDay関数を代入しているので「7」が入ります。

 そしてその「7」は土曜日なので2行目に土曜日と表示されています。

マルチページ  エクセル職人  VBA関数(文字列操作に関する関数)

▲TOPへ移動