DateSerial関数の使い方

初級VBA

はじめに

 DateSerial関数は、日付を生成する関数です。
 DateSerial(2022,11,15) とすれば、2022/11/15 を取得でるような単純な関数ですが、
 日付部分に 0 をセットすると、 1 の前という事で前月の最終日(月末)を指してくれるなど、少しトリッキーな使い方ができます。
 
 今回は色々実験して挙動を確かめてみましょう。

構文

  DateSerial(year, month, day)

 DateSerial関数の引数は Integer 型ですので -32,768 から 32,767 を超えるとエラーになります。

引 数内 容
year年を指す 100 以上 9999 以下の数値か数式をセットします。
年を 2桁で表す場合、 0 から 29 までは、2000年~2029年。
30 から 99 までは、1930年から 1999年になります。
month月を指す、1~12 の数を指定します。
13 をセットすると翌月の1月、 0 をセットすると前年の12月となります。
day日を指す、1~31の数を指定します。
0 をセットすると前月の末日になります。

サンプルコード

 DateSerial関数は、DateSerial(2022,2,31) など 2022/2/31 というありえない日付をセットしても、日付を繰り上げたり、繰り下げたりして日付を返してくれます。

DateSerial(2022, 2, 31)  '2022/03/03

 日付に 0 を指定すると、前月の末日を返してくれます。

DateSerial(2022, 1, 0)   '2021/12/31

 このように日付が1~31の範囲を超えた場合、月や年も連動して繰り下げや繰り上げを行って日付を返します。

 月も同じく、1~12 の範囲を超えると年も連動します。(あふれた時には日付も連動します。)

DateSerial(2022, 14, 31)   '2023/03/03

月末の日付を取得

DateSerial関数を使うと各月の月末を得る事ができます。

    DateSerial(Year(Date), Month(Date) + 1, 0)  '当月の末日
    DateSerial(Year(Date), Month(Date), 0)      '前月の末日
    DateSerial(Year(Date), Month(Date) + 2, 0)  '来月の末日

まとめ

 DateSerial関数は、単純に日付を生成する関数としても使えますが、数値を操作することで前月や翌月の日付も生成できます。
 特に日付で 0 をセットする方法は良く使うので覚えておくと良いでしょう。 

タイトルとURLをコピーしました