こんにちは、Ryoです。
データの演算処理を行う中で数値データ以外にも日付や時刻を扱うこともあるかと思います。その際に便利な関数としてDateAdd関数がありますので、今回はその内容について書いていきます。
1.サンプル概要
下の表内にある「日付」「時間」のデータに対し加算や減算を行っていきます。

「日付」のデータに対して「四半期」「年」「月」「年間通算日」「日」「週日」「週」の単位で「1」を加算した結果が以下になります。

次は「時間」データに対し「時」=1、「分」=10、「秒」=30を加算した結果です。

同様に「時間」データに対して同値で減算処理したものが以下です。

以上がサンプル概要になります。
2.サンプルコード
◆「日付」加算
Sub Sample1()
Dim tgt1, tgt2 As String
Dim i, n As Integer
'日付データを変数tgt1に格納
tgt1 = Range("A2").Value
'表内の項目数分(7回)繰り返し
For i = 1 To 7
'表内の「項目」値から引数interval設定判定用として
'表の文字を変数tgt2に格納
tgt2 = Cells(i + 1, 2).Value
'引数numberへの設定値を「加算値」から変数nへ格納
n = Cells(i + 1, 3).Value
'変数tgt2に格納した文字列から引数interval設定値へ置換
Select Case tgt2
Case "四半期"
tgt2 = "q"
Case "年"
tgt2 = "yyyy"
Case "月"
tgt2 = "m"
Case "年間通算日"
tgt2 = "y"
Case "日"
tgt2 = "d"
Case "週日"
tgt2 = "w"
Case "週"
tgt2 = "ww"
End Select
'表内の結果欄へ日付データにそれぞれの項目を
'加算した内容を書き込み
Cells(i + 1, 4).Value = DateAdd(tgt2, n, tgt1)
Next i
End Sub
◆「時間」加算
Sub Sample2()
Dim tgt1, tgt2 As String
Dim i, n As Integer
tgt1 = Range("A11").Value
For i = 1 To 3
tgt2 = Cells(i + 10, 2).Value
n = Cells(i + 10, 3).Value
Select Case tgt2
Case "時"
tgt2 = "h"
Case "分"
tgt2 = "n"
Case "秒"
tgt2 = "s"
End Select
Cells(i + 10, 4).Value = DateAdd(tgt2, n, tgt1)
Next i
End Sub
◆「時間」減算
Sub Sample3()
Dim tgt1, tgt2 As String
Dim i, n As Integer
tgt1 = Range("A16").Value
For i = 1 To 3
tgt2 = Cells(i + 15, 2).Value
'減算なので読み取り値に-1を乗じる
n = Cells(i + 15, 3).Value * -1
Select Case tgt2
Case "時"
tgt2 = "h"
Case "分"
tgt2 = "n"
Case "秒"
tgt2 = "s"
End Select
Cells(i + 15, 4).Value = DateAdd(tgt2, n, tgt1)
Next i
End Sub
このように「日付」や「時間」の加算/減算を行うにはDateAdd関数を利用します。
構文:DateAdd(interval, number, date)
DateAdd関数は引数dateに指定した日付や時間に、引数intervalの指定単位で引数numberに指定した数値を加算/減算するものです。
≪引数interval設定値≫
| 設定値 | 内容(単位) |
| yyyy | 年 |
| q | 四半期 |
| m | 月 |
| y | 年間通算日 |
| d | 日 |
| w | 週日 |
| ww | 週 |
| h | 時 |
| n | 分 |
| s | 秒 |
四半期で1を加算すれば3ヶ月、週日で1を加算すれば7日のような形になります。年間通算日や週日の加算/減算もできますが有効利用のイメージが考え難いので利用頻度は少なそうに思います。
以上がサンプルコードになります。
3.まとめ
DateAdd関数は面倒な日付や時間の加算・減算してくれますのでとても便利で利用機会も多いと思います。
特に時間データの加算や減算は勤怠集計などを処理する際にはかなり有用な関数です。時間データはシリアル値などで処理していると誤差が出て演算結果にズレが生じることがあるのでDateAdd関数のご利用をお薦めします。
以上、日付や時刻の加算/減算を行う方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

