本ページには広告が含まれています。

ExcelVBA DateValue関数 日付文字列を日付に変換

ExcelVBA DateValue関数 日付文字列を日付シリアル値に変換

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_Smple01 実行結果イミディエイト画像
行番引数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 の結果を表示です。

DateValue_Smple02 MsgBox画像①

時刻表示は返されていないことが確認できます。

次は、8行目の処理の MsgBox 画像です。

DateValue_Smple02 MsgBox画像②

Format関数を使って、DateValue の結果から時刻部分を表示するように設定してみました。
結果は、画像のとおり 00:00:00 と表示され、時刻部分のデータが存在しないことが確認できました。

Date など日付・時刻関数の使用例について

Date 関数のほか「日付・時刻」の関数について解説している過去記事があります。下記のリンクからジャンプしてご覧いただければ、Format関数の日付関連書式記号一覧を確認いただけます。

おわりに

Excel VBA DateValue 関数は、日付形式の文字列を日付シリアル値 Variant (Date) に変換して返します。

「日付形式の文字列」の形式については、解説の中で説明していますが、年表示が省略形式だった場合に、設定値によっては誤った戻り値が返る場合があることに注意してください。

また、日付に時刻もついている場合には、時刻部分は無視されることも認識しておきましょう。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらを参照ください。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!