背景

VBA関数「DateSerial」の引数を、いろいろと変化させた時の戻り値を調べます。

シートに、下のような表を作成します。

また、以下のコードを書きます。

Sub Test_DateSerial()
    
    '順に「年・月・日」用
    Dim Y As Integer
    Dim M As Integer
    Dim D As Integer
    
    '「年」を入力したセル番地の指定用
    Const colStart As String = "C"
    Const rowStart As Long = 2
    
    'セルに入力された「年・月・日」を変数に格納
    Y = Range(colStart & rowStart).Value
    M = Range(colStart & rowStart + 1).Value
    D = Range(colStart & rowStart + 2).Value
    
    '「戻り値」表示用のセルに結果を格納
    Range(colStart & rowStart + 3).Value = DateSerial(Y, M, D)

End Sub

画像はこちら。

これを実行すると、下図のようになります。

月の引数を変える(0やマイナスにしてみる)

月の引数を変える=C3セルの値を、

  • 13
  • 0
  • -1
  • -13

と変化させて、上記コードを実行した時の戻り値がどうなるか確認します。

このように、0やマイナスにしても、2026/1/1を起点「1」にして、そこから引数との差分だけ進んだ(戻った)日付が、戻り値として返されました。

日の引数を変える(0やマイナスにしてみる)

同様に、日の引数を変える=C4セルの値を、

  • 0
  • -1

と変化させて、上記コードを実行した時の戻り値がどうなるか確認します。

「0」にすると「前月の末日」が、「-1」にすると「前月の末日の前日」が返されました。

このように、DateSerial関数は、引数の許容範囲が広く、アイデア次第で便利に使えそうです。

たた、戻り値をよく確認してからにしないと、意図しない結果も招きそうなので、注意しようと思います。

ちなみに「年」を「0」にすると…

こうなります。

参考

投稿時の環境

  • Windows11 Home Ver. 25H2
  • Excel for Microsoft 365 Ver. 2607