10/19/2024

Excel。VBA。日付計算なら、DateAdd関数をつかうと便利です【Date arithmetic】

Excel。VBA。日付計算なら、DateAdd関数をつかうと便利です

<DateAdd関数>

Excelにはなく、Excel VBAにあるDateAdd関数は日付計算をするのに便利な関数です。


次の表を用意しています。


B1に日付が入力されています。


B3には、B1の日付の3日後。

B4には、B1の3か月後の日付を表示したいわけです。


B3は3日後なので、単純に「+3」でいいのですが、B4の3か月後というのは、単純な足し算というわけにはいきません。


月に「+3」するわけにはいきません。

そこで、EDATE関数をつかうなどする必要があるわけです。


例えば、次のようなExcel VBAのプログラム文を用意しました。

Sub 日付計算()

    Dim input_date As Date

    input_date = Range("b1")


    Range("b3") = input_date + 3

    Range("b4") = "=edate(b3,3)"

End Sub


B4には、Formulaプロパティで通常のEDATE関数の数式を設定しています。


では、実行してみましょう。


B3の日付はスムーズに3日後を表示していますが、3か月後は、EDATE関数によって算出されているものの、シリアル値で算出されてしまっています。


これを日付形式に変更する必要があります。


これでは、少し面倒ですね。

そこで、DateAdd関数をつかって、プログラム文を変更してみます。


Sub 日付計算()

    Dim input_date As Date

    input_date = Range("b1")


    Range("b3") = DateAdd("d", 3, input_date)

    Range("b4") = DateAdd("m", 3, input_date)

End Sub


では、実行してみましょう。


B3の結果は同じですが、3か月後は明らかに異なっています。


シリアル値で算出されていません。

日付形式で算出されています。


DateAdd関数は、引数に、加算方式が含まれています。

その加算方式を設定するだけで、月であっても日であっても年であっても、数式の形式自体は同じで済みます。


EDATE関数を覚えるなど、複数の関数を使い分ける必要はありません。