DateSerial関数の日付データ(シリアル値)とは?

DateSerial関数は、VBAエキスパート試験を受ける前にしっかり理解しておきたい関数だ。この関数について「VBAエキスパート公式テキスト Excel VBA ベーシック」には次のように書かれている

DateSerial関数は、年月日を表す3つの数値から、日付データ(シリアル値)を返します。

【書式】 DateSerial(年, 月, 日)

ここで引っかかるのが「日付データ(シリアル値)とは一体何なのか?」ということだ。テキストの中では特に書かれていなかったので、このページで解説する。

スポンサーリンク

日時を数値で表したものがシリアル値

Excelのシリアル値は、日時を数値で表したものだ。たとえば、2019年2月10日をシリアル値で表すと43506となる。

その次の日である2019年2月11日は、シリアル値で表すと43507だ。

日付ごとにシリアル値は決まっている。また、日付上1つ進むと、シリアル値も1進んだ数値になる。serialとは「連続的な」という意味だ。なのでシリアル値は連続した数値になる。

シリアル値から日付を求めることもできる。たとえば次の図の赤枠には、どんな日付が入るだろうか?

答えは「2019/2/20」だ。シリアル値が10進んでいるので、日付上も10進む。

日付とシリアル値は一対一の関係の関係だ。よって、日付が決まればシリアル値が決まる。その反対に、シリアル値が決まれば日付が決まる。

VBAエキスパートの試験対策としては、シリアル値は「日付に対応した固有の数値」という理解で充分だと思う。

Dateserial関数の月・日には「0」を指定できる

冒頭でも触れたが、DateSerial関数は、年月日を表す3つの数値から日付データ(シリアル値)を返す。たとえば次のSubプロシージャを実行すると、イミディエイトウィンドウに「2019/02/01」と表示される。

Sub Test()
    '2019/02/01 と表示される
    Debug.Print DateSerial(2019, 2, 1)
End Sub

ここでポイントとなるのは、月や日に0を指定できることだ。つまり、次のような書き方が可能となる。

Sub Test()
    Debug.Print DateSerial(2019, 2, 0)
End Sub

このプロシージャを実行すると、イミディエイトウィンドウには何が表示だろうか。

 

その答えは
2019/01/31
だ。

「DateSerial(2019, 2, 0)」というのは、シリアル値では「DateSerial(2019, 2, 1)」の1つ前の値を指す。よって、日付上でも1つ前を指すため「2019/01/31」と表示さる。

練習問題

次のプロシージャのうち、イミディエイトウィンドウに「2018/12/01」と表示するものはどれか。正しいものを1つ選択しなさい。

  1. Sub Test1()
    Debug.Print DateSerial(2018, 1, 0)
    End Sub
  2. Sub Test2()
    Debug.Print DateSerial(2019, 1, 0)
    End Sub
  3. Sub Test3()
    Debug.Print DateSerial(2018, 0, 1)
    End Sub
  4. Sub Test4()
    Debug.Print DateSerial(2019, 0, 1)
    End Sub

正解を見る

4

コメント