Dim A, B
A = "17:01:02"
B = DateAdd("h", 1, A) ' 1時間足す:18:01:02
B = DateAdd("h", -1, A) '1時間引く:16:01:02
B = DateAdd("n", 1, A) ' 1分足す :17:02:02
B = DateAdd("n", -1, A) '1分引く :17:00:02
B = DateAdd("s", 1, A) ' 1秒足す :17:01:03
B = DateAdd("s", -1, A) '1秒引く :17:01:01
では、解説していきまます。
VBAでDateAddを使って時間の足し算や引き算をする
時間の足し算や引き算をするのは、DateAddを使えばできます。
DateAddの使い方を、具体的なVBAコードを使って解説していきます。
使い方(DateAdd)
まず、DateAddへは、次のように入力します。
『計算結果 = DateAdd(間隔, 数値, 時間)』
間隔には、次の引数を入力することができます。
時:"h"
分:"n"
秒:"s"
数値には、『1』や『-2』といった値を入力します。
『時』を1時間だけ足し算、引き算をする
では、時間に1時間足したり、引いたり、してしてみます。
時間を計算をするには、DateAddの引数に『"h"』を使います。
時間を1時間足す
1時間足すので、数値には『1』を入力します。
時間『"17:1:2"』に1時間足すVBAコードです。
Sub TEST1()
Dim A, B
A = "17:1:2"
'1時間足す
B = DateAdd("h", 1, A)
MsgBox B
End Sub
実行してみます。
結果は、『18:01:02』となりました。
1時間だけ足されています。
時間を1時間引く
次は、1時間引くので、数値には『-1』を入力します。
時間『"17:1:2"』から1時間引くVBAコードです。
Sub TEST2()
Dim A, B
A = "17:1:2"
'1時間引く
B = DateAdd("h", -1, A)
MsgBox B
End Sub
実行してみます。
結果は、『16:01:02』となりました。
1時間だけ引き算されました。
『分』を1分だけ足し算、引き算をする
つづいて、時間を1分足したり、引いたりしてしてみます。
『分』を計算するには、DateAddの引数に『"n"』を使います。
時間を1分足す
1分足すので、数値には『1』を入力します。
時間『"17:1:2"』に1分足すVBAコードです。
Sub TEST3()
Dim A, B
A = "17:1:2"
'1分足す
B = DateAdd("n", 1, A)
MsgBox B
End Sub
実行してみます。
結果は、『17:02:02』となりました。
1分だけ足し算されています。
時間を1分引く
次は、1分引くので、数値には『-1』を入力します。
時間『"17:1:2"』から1分引くVBAコードです。
Sub TEST4()
Dim A, B
A = "17:1:2"
'1分引く
B = DateAdd("n", -1, A)
MsgBox B
End Sub
実行してみます。
結果は、『17:00:02』となりました。
1分だけ引き算されました。
『秒』を1秒だけ足し算、引き算をする
次は、時間を1秒だけ足したり、引いたりしてしてみます。
『秒』を計算するには、DateAddの引数に『"s"』を使います。
時間を1秒足す
1秒足すので、数値には『1』を入力します。
時間『"17:1:2"』に1秒足すVBAコードです。
Sub TEST5()
Dim A, B
A = "17:1:2"
'1秒足す
B = DateAdd("s", 1, A)
MsgBox B
End Sub
実行してみます。
結果は、『17:01:03』となりました。
1秒だけ足されました。
時間を1秒引く
次は、1秒引くので、数値には『-1』を入力します。
時間『"17:1:2"』から1秒引くVBAコードです。
Sub TEST6()
Dim A, B
A = "17:1:2"
'1秒引く
B = DateAdd("s", -1, A)
MsgBox B
End Sub
実行してみます。
結果は、『17:01:01』となりました。
1秒だけ引き算されました。
DateAddを使って日付をまたぐ場合
DateAddを使って時間を、足したり引いたりした場合に、日付をまたぐ場合は、注意が必要です。
ちょっとやってみます。
1時間足して日付をまたぐ
DateAddで、時間を1時間足して、日付がをまたいでみます。
時間『"23:01:02"』をDateAddで1時間足すVBAコードです。
Sub TEST7()
Dim A, B
A = "23:1:2"
'1時間足す
B = DateAdd("h", 1, A)
MsgBox B
End Sub
Sub TEST10()
Dim A, B
A = Cells(1, 2) 'セルの時間を取得
B = DateAdd("h", Cells(4, 1), A) '『時』を計算
B = DateAdd("n", Cells(4, 2), B) '『分』を計算
B = DateAdd("s", Cells(4, 3), B) '『秒』を計算
Cells(2, 2) = B 'セルに入力'表示形式をhh:mm:ssに変換
Cells(2, 2).NumberFormatLocal = "hh:mm:ss"
End Sub
セルに元の時間と、足したり引いたりしたい、『時』や『分』を入力します。
セルに時間を入力
VBAコードを実行して、時間を計算してみます。
セルの値から時間を計算
結果は、『18:00:03』となりました。
セルに入力された時や分から時間を計算できました。
スピンボタンで時間の足し算や引き算をする
ユーザーフォームのスピンボタンで時間を足したり引いたりするVBAコードです。
ユーザーフォームの中のコードに記載します。
'スピンアップで実行
Private Sub SpinButton1_SpinUp()
'1時間足す
TextBox1.Text = DateAdd("h", 1, TextBox1.Text)
End Sub
'スピンダウンで実行
Private Sub SpinButton1_SpinDown()
'1時間引く
TextBox1.Text = DateAdd("h", -1, TextBox1.Text)
End Sub
'スピンアップで実行
Private Sub SpinButton2_SpinUp()
'1分足す
TextBox1.Text = DateAdd("n", 1, TextBox1.Text)
End Sub
'スピンダウンで実行
Private Sub SpinButton2_SpinDown()
'1分引く
TextBox1.Text = DateAdd("n", -1, TextBox1.Text)
End Sub
'スピンアップで実行
Private Sub SpinButton3_SpinUp()
'1秒足す
TextBox1.Text = DateAdd("s", 1, TextBox1.Text)
End Sub
'スピンダウンで実行
Private Sub SpinButton3_SpinDown()
'1秒引く
TextBox1.Text = DateAdd("s", -1, TextBox1.Text)
End Sub