Excel VBAの「DateSerial 関数」について解説します。
DateSerial 関数とは
Excel VBA の DateSerial 関数は、年,月,日を表す3つの数値から日付シリアル値 Variant (Date) を返します。
DateSerial 関数で返された日付シリアル値は Format関数を併用すれば、和暦表示や曜日を表示したりするなど、さまざまな形式に変換することができます。
DateSerial 関数の構文や引数の設定や実際の使い方について解説していきたいと思います。
DateSerial 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
DateSerial(year, month, day)
引数
次の3つの引数は【必須】省略できません。データ型はすべて Integer です。
引数 | 説明 |
---|---|
year | 100~9999 の範囲で、年を示す数値または数式を指定します |
month | 1~12 の範囲で、月を示す数値または数式を指定します |
day | 1~31 の範囲で、日を示す数値または数式を指定します |
引数 year 設定注釈
※ 0~29 の指定は、2000~2029 に変換されます
※ 30~99 の指定は、1939~1999 に変換されます
※ 100~9999 の指定は、そのままの数値です
※ 9999 を超える指定は、実行時エラー’6′ (オーバーフロー) が発生します
※ 相対設定などで範囲外の指定となる場合は、実行時エラー’5′ が発生します
※ 引数がデータ型(Integer)の範囲 -32,768 ~ 32,767 を超えるとエラーが発生します
引数の相対指定
日付を指定するには、各引数の数値範囲(例えば、日 は 1~31、月 は 1~12)で絶対値を指定します。 ただし、任意の数式を使用して、特定の日付の前後の年数や月数、日数を指定する場合などのように、相対日付で指定することもできます。
例えば、日付「2024年6月1日」から次のようなコード、DateSerial(2024 - 12, 6 - 2, 1 - 1)
を実行すると 2012 年 3 月 31 日を返します。
これは、月初めの前日として (1 – 1) で月末を求め、6月の2か月前は (6 – 2)、2024年の12年前は (2024 – 12)、t算式で相対指定しています。2012 年 3 月 31 日と返るのは、日付を月末の前日と指定をしているので、月も一つ前の月となるためです。
戻り値
戻り値 | 説明 |
---|---|
日付シリアル値 | 戻り値のデータ型は Variant(Date)です |
解説(使用例)
それでは、各引数に設定する値で取得できる日付シリアル値を見てみましょう。
DateSerial 関数の動作を確認するサンプルコード
'■DateSerial関数の動作確認サンプル
Sub DateSerial_Sample01()
Dim d As Date
d = DateSerial(2024, 1, 1)
Debug.Print d '2024/01/01
d = DateSerial(2024, 0, 1) '月に0を指定
Debug.Print d '2023/12/01
d = DateSerial(2024, 1, 0) '日に0を指定
Debug.Print d '2023/12/31
d = DateSerial(2024, 0, 0) '月日ともに0を指定
Debug.Print d '2023/11/30
d = DateSerial(2024, -1, -1) '月日に-1を指定
Debug.Print d '2023/10/30
d = DateSerial(2024, 13, 1) '月に13を指定
Debug.Print d '2025/01/01
d = DateSerial(2024, 3, 0) '3月1日の前日は
Debug.Print d '2024/02/29
End Sub
実行結果の イミディエイト 画像がこちらです。
![DateSerial_Smple01 実行結果イミディエイト画像](https://www.kurumico.com/wp-content/uploads/2024/06/vba-dateserial-02.jpg)
・5行目、DateSerial(2024, 1, 1) の引数は数値範囲なのでそのまま 2024/01/01 が返ります。
・8行目、引数 month に 0 を指定しています。これは ( 1 – 1 = 0) ということで 1月の一つ前に戻るので 12月 ということです。月が12月になるのだから年も一つ戻り、2023/12/01 が返ります。
・11行目、引数 day に 0 を指定しています。1日前に戻すので、戻り値は 2023/12/31 となります。
・ 14行目、month と day 両方が 0 です。1日前に戻り、さらに月も1月戻るので 2023/11/30 が返ります。
・17行目、month と day 両方が -1 です。2日と2月前に戻すので、2023/10/30 が返ります。
・20行目、month に 13 です。13月進めるので、1年後の 2025/01/01 が返ります。
・23行目、3月1日 の 1日前なので、2月末日 2024/02/29 が返ります。2024年が閏年ということがわかります。
日付シリアルをFormat関数で変換して表示するサンプル
DateSerial関数が返すシリアル値をいくつか変換してみましょう。
'■DateSerial値をFormat関数で変換して表示
Sub DateSerial_Sample02()
Dim d As Date
d = DateSerial(2024, 1, 1)
Debug.Print d '2024/04/01
'▼月日を一桁表示に変換する
Debug.Print Format(d, "yyyy/m/d")
'▼和暦元号表示に変換する
Debug.Print Format(d, "ggge年m月d日")
'▼曜日付きの和暦元号表示に変換する
Debug.Print Format(d, "ggge年m月d日aaaa")
'▼(曜日)付きの和暦元号表示に変換する
Debug.Print Format(d, "ggge年m月d日(aaa)")
'▼和暦記号表示+曜日(英略)表示に変換する
Debug.Print Format(d, "ge/m/d(ddd)")
End Sub
実行結果の イミディエイト 画像がこちらです。
![DateSerial_Smple02 実行結果イミディエイト画像](https://www.kurumico.com/wp-content/uploads/2024/06/vba-dateserial-03.jpg)
・5行目、はじめに DateSerial(2024, 1, 1) の戻り値「2024/04/01」をそのまま表示しています。
・8行目、月日の表示を一桁で表示させています。「2024/1/1」
・10行目、和暦元号表示に変換しています。「令和6年1月1日」
・12行目、曜日付きの和暦元号表示に変換しています。「令和6年1月1日月曜日」
・14行目で、(曜日)付きの和暦元号表示に変換させています。「令和6年1月1日(月)」
・16行目で、和暦記号表示で、曜日を(英略)表示に変換しています。「R6/1/1(Mon)」
Date など日付・時刻関数の使用例について
Date 関数のほか「日付・時刻」の関数について解説している過去記事があります。下記のリンクからジャンプしてご覧いただければ、Format関数の日付関連書式記号一覧を確認いただけます。
おわりに
VBAの関数一覧はこちらを参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA DateSerial 関数は、年,月,日 を表す3つの数値から日付シリアル値に変換して返します。
各引数には、指定できる数値範囲がありますが、範囲外の数値が指定された場合は、相対指定されたとみなされて動作することがわかりました。
相対指定する場合は、「月」と「日」は連動して増減するので注意する必要があります。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;