Excel VBAの「DateSerial 関数」について解説します。
DateSerial 関数とは
Excel VBA の DateValue 関数は、日付形式の文字列を日付シリアル値 Variant (Date) に変換して返します。
DateValue 関数の構文や引数の設定など、実際の使い方について解説していきたいと思います。
DateValue 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
DateValue(date)
引数
引数 | 説明 |
---|---|
date | 【必須】日付を表す文字列式を指定します 100年1月1日~9999年12月31日の範囲内で日付や時刻、 または日付と時刻の両方を表す任意の式を指定できます |
※ 年の値が 0~29 の指定は、2000~2029 に変換されます
※ 年の値が 30~99 の指定は、1939~1999 に変換されます
※ 不正な値が指定された場合は、実行時エラーが発生します
戻り値
戻り値 | 説明 |
---|---|
日付シリアル値 | 戻り値のデータ型は Variant(Date)です |
解説(使用例)
それでは、いろいろな形式の引数に設定する値で取得できる日付シリアル値を確認してみましょう。
DateSerial 関数の動作を確認するサンプルコード
引数に設定した日付と DateValue 関数の戻り値を比較して結果を「◎」「×」で表示します。
'■DateValue関数の動作確認サンプル
Sub DateValue_Sample01()
Dim sd As String
Dim str As String
'▼いろいろな引数を変数に代入
sd = "2024/6/12" '一般的な日付
GoSub DP '比較表示するサブルーチンへ分岐
sd = "24/6/12" '年を二桁で表示
GoSub DP
sd = "6/12/2024" '年を最後に表示
GoSub DP
sd = "6/12/24" '年を二桁で後ろに表示
GoSub DP
sd = "June 12,2024" '月が英語表記
GoSub DP
sd = "Jun 12,2024" '英語表記が省略形
GoSub DP
sd = "2024年6月12日" '西暦の年月日つき表記
GoSub DP
sd = "令和6年6月12日" '和暦表記
GoSub DP
sd = "R6年6月12日" '和暦記号で表記
GoSub DP
sd = "令和6年6月12日" '全角文字
GoSub DP
sd = "24年6月" '年月だけ
GoSub DP
sd = "6/12" '全角で月/日だけ
GoSub DP
sd = "2024/06/12 10:56:09" '時刻付き表記
GoSub DP
Exit Sub
'▼引数とDateValueの結果を比較表示サブルーチン
DP:
If #6/12/2024# = DateValue(sd) Then
str = " ◎"
Else: str = " ×"
End If
Debug.Print sd & vbCrLf & _
" → " & DateValue(sd) & str
Return
End Sub
実行結果 イミディエイト 画像がこちらです。
行番 | 引数 | DateValue戻り値 | 結果 | 説明 |
---|---|---|---|---|
6 | “2024/6/12” | 2024/6/12 | ◎ | 一般的な日付設定(これを基準に) |
8 | “24/6/12” | 2024/6/12 | ◎ | 西暦年を二桁で表記 |
10 | “6/12/2024” | 2024/6/12 | ◎ | 西暦年を最後に表記 |
12 | “6/12/24” | 2006/12/24 | × | 年を二桁で後ろに表記 年月の判別ができなかったため |
14 | “June 12,2024” | 2024/6/12 | ◎ | 月が英語表記 |
16 | “Jun 12,2024” | 2024/6/12 | ◎ | 英語表記が省略形 |
18 | “2024年6月12日” | 2024/6/12 | ◎ | 西暦の年月日つき表記 |
20 | “令和6年6月12日 | 2024/6/12 | ◎ | 和暦表記 |
22 | “R6年6月12日” | 2024/6/12 | ◎ | 和暦の記号表記 |
24 | “令和6年6月12日” | 2024/6/12 | ◎ | 全角文字で表記された場合 |
26 | “24年6月” | 2024/6/01 | × | 年月だけで表記(日を省略) 日が省略されると月初の日付になる |
28 | “6/12” | 2024/6/12 | ◎ | 全角で月/日だけの表記 年省略は実行年が表示される |
30 | “2024/06/12 10:56:09” | 2024/6/12 | ◎ | 時刻付きの日付表記の場合 時刻の情報は返しません |
・7行目ほか、各引数を変数 sd に代入後、GoSub DP で 34行目からのサブルーチンに処理を移しています。
・34行目~41行目は、引数とDateValueの結果を比較表示するサブルーチンです。
・35行目~38行目で、日付リテラル #6/12/2024# と引数 DateValue の結果を比較して処理を分岐させています。結果が合致していれば「◎」、合致しない場合は「×」を変数 str に代入します。
・39行目、Debug.Print で結果を表示させています。
・41行目、2日と2月前に戻すので、2023/10/30 が返ります。
・20行目、Return でジャンプ元の行に処理を戻しています。
・32行目、Exit Sub はここまでですべて処理が完了しているので、サブルーチンにすすまないようにしています。
DateValue 関数の引数設定時は「年」を西暦で表記する場合の桁数は省略しない方がよさそうですね。
時刻を含む日付のDateValue値を再確認するサンプル
前段コードの30行目で「時刻部分を返さない」としていますが、その部分を再確認してみます。
'■DateValueが時刻を返さないことを確認するサンプル
Sub DateValue_Sample02()
Dim sDate As String
'▼時刻データを含む引数を検証
sDate = Now '現在時刻を変数に代入
MsgBox sDate & " のDateValueは、" & _
vbCrLf & DateValue(sDate) & " です"
MsgBox _
"Format(DateValue(sDate), ""yyyy/mm/dd hh:mm:ss"") の" & _
vbCrLf & "戻り値は、" & _
Format(DateValue(sDate), "yyyy/mm/dd hh:mm:ss") & " です"
End Sub
コード実行で表示される2つの MsgBox 画像がこちらです。
はじめは、6行目の 引数 Now と DateValue の結果を表示です。
時刻表示は返されていないことが確認できます。
次は、8行目の処理の MsgBox 画像です。
Format関数を使って、DateValue の結果から時刻部分を表示するように設定してみました。
結果は、画像のとおり 00:00:00 と表示され、時刻部分のデータが存在しないことが確認できました。
Date など日付・時刻関数の使用例について
Date 関数のほか「日付・時刻」の関数について解説している過去記事があります。下記のリンクからジャンプしてご覧いただければ、Format関数の日付関連書式記号一覧を確認いただけます。
おわりに
VBAの関数一覧はこちらを参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA DateValue 関数は、日付形式の文字列を日付シリアル値 Variant (Date) に変換して返します。
「日付形式の文字列」の形式については、解説の中で説明していますが、年表示が省略形式だった場合に、設定値によっては誤った戻り値が返る場合があることに注意してください。
また、日付に時刻もついている場合には、時刻部分は無視されることも認識しておきましょう。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;