みなさん、こんにちは。
ITソリューション事業部の林です。
本記事では、ExcelVBAのテクニックを紹介・解説いたします。
今回紹介するのは、「日付を計算する関数」です。
【目次】
それでは、始めましょう!
日付を加算・減算する関数
日付を加算・減算する関数はDateAddです。
[書式]DateAdd(時間間隔, 数値, 基準日)
時間間隔には、加算・減算する時間間隔の設定値を入力します。
ここで設定した時間間隔の単位で、関数から値が戻ってきます。
設定できる時間間隔は複数ありますが、使用頻度の高いものを以下に挙げます。
設定値 | 内容 |
yyyy | 年 |
m | 月 |
d | 日 |
h | 時 |
n | 分 |
s | 秒 |
数値には、基準日から追加または減少する数を設定します。
正数を入力すると基準日にその数が追加され、負数を入力すると基準日からその数が引かれます。
基準日には、日付型の変数もしくは日付を直接入力します。
以下は、DateAddを用いて現在時刻から1を加算・減算した結果です。
Sub ExcelVBA_030_Example1() Dim BufDate As Date BufDate = Now Debug.Print "===現在時刻に加算===" Debug.Print DateAdd("yyyy", 1, BufDate) 'y=年 Debug.Print DateAdd("m", 1, BufDate) 'm=月 Debug.Print DateAdd("d", 1, BufDate) 'd=日 Debug.Print DateAdd("h", 1, BufDate) 'h=時 Debug.Print DateAdd("n", 1, BufDate) 'n=分 Debug.Print DateAdd("s", 1, BufDate) 's=秒 Debug.Print "===現在時刻から減算===" Debug.Print DateAdd("yyyy", -1, BufDate) 'y=年 Debug.Print DateAdd("m", -1, BufDate) 'm=月 Debug.Print DateAdd("d", -1, BufDate) 'd=日 Debug.Print DateAdd("h", -1, BufDate) 'h=時 Debug.Print DateAdd("n", -1, BufDate) 'n=分 Debug.Print DateAdd("s", -1, BufDate) 's=秒 End Sub
(↓イミディエイトウインドウの出力結果↓)
日付と日付の間隔を計算する関数
異なる日付の時間差を求める場合、DateDiff関数を使用します。
[書式]DateDiff(時間間隔, 日付1, 日付2)
時間間隔に設定する値はDateAdd関数と同じですので省略します。
日付1は日付計算の起点となる日付を、日付2には日付1の前または後の日時を設定します。
計算の起点(日付1)から日付2までの経過時間が関数の戻り値となります。
以下は、DateDiffで2020/4/1から現在時刻までの経過時刻を出力した結果です。
Sub ExcelVBA_030_Example2() Dim BufDate1 As Date Dim BufDate2 As Date BufDate1 = #4/1/2020# '日付1(計算の起点) BufDate2 = Now '日付2 Debug.Print "経過した年数:", DateDiff("yyyy", BufDate1, BufDate2) Debug.Print "経過した年数:", DateDiff("m", BufDate1, BufDate2) Debug.Print "経過した年数:", DateDiff("d", BufDate1, BufDate2) End Sub
(↓イミディエイトウインドウの出力結果↓)
マクロサンプル
サンプル 使用期限を過ぎた備品をチェックする
使用期限の設定された備品が、現時点で期限切れかそうでないかを表示します。
DateAddを用いて導入日+耐用年数で使用期限を求め、DateDiffで現在時刻と使用期限の差分を計算し、使用期限内or期限超過を出力します。
Sub ExcelVBA_030_Example3() Dim Cnt As Long Dim BufDate1 As Date Dim BufDate2 As Date Dim Limit As Long For Cnt = 2 To 4 BufDate1 = Cells(Cnt, 3).Value '導入日 Limit = Cells(Cnt, 4).Value '耐用年数 BufDate2 = DateAdd("yyyy", Limit, BufDate1) '導入日+耐用年数=使用期限 If DateDiff("d", Now, BufDate2) >= 0 Then '現時刻と使用期限の差分で判定 Cells(Cnt, 5).Value = "期限内" '現時刻<=使用期限なら期限内 Else Cells(Cnt, 5).Value = "期限超過" '現時刻>使用期限なら期限超過 End If Next End Sub[マクロ実行前] [マクロ実行後]
今回の記事は以上になります。
それでは、また次回お会いしましょう!