VBA FormatDateTime 関数:日付を Windows の形式で文字列に変換する

はじめに

Excel VBA マクロの FormatDateTime 関数から日付を Windows の形式で文字列に変換する方法を紹介します。

FormatDateTime 関数は、日時を地域に合った形式で文字列型 (String) に変換します。

日本なら 2000/01/02 のように 年/月/日 の形式に変換します。

アメリカなら 1/2/2000 のように 月/日/年 の形式に変換します。

VBA を実行しているパソコンがある地域に合った形式で、日付を文字列に変換したいときに使用します。

日付を文字列に変換するには「日付を変換する」をご覧ください。
  • 目次
    • 構文
    • 解説
    • 使用例

構文

FormatDateTime(日付)
日付を Windows の形式の文字列に変換します。

FormatDateTime(日付, 形式)
日付を指定した形式の文字列に変換します。

引数「日付」日時を指定します。
引数「形式」省略できます。日時の形式を指定します。
戻り値の型文字列型 (String)

引数「形式」

引数「日付」が 2000/1/2 3:4:5 で日本のとき。

書式 結果 説明
vbGeneralDate
(既定)
2000/01/02 3:04:05日付と時刻の一方または両方を表示します。日付部分がある場合は「短い形式」として表示します。時刻部分がある場合は「長い形式」として表示します。
vbLongDate2000年1月2日日付の「長い形式」を使用して日付を表示します。
vbShortDate2000/01/02日付の「短い形式」を使用して日付を表示します。
vbLongTime3:04:05時刻の「長い形式」を使用して時刻を表示します。
vbShortTime03:0424 時間形式 (hh:mm) を使用して時刻を表示します。

解説

日付は日本では 年/月/日 の形式ですが、アメリカでは 月/日/年 が一般的です。この違いを自動で補ってくれます。

Windows の形式を変更するには次の設定から行います。この設定が使用しているパソコンによって違うため、日本とアメリカなどで適切な形式に変換できます。

  • Windows 11設定 > 時刻と言語 > 言語と地域 > 地域設定 > 形式を変更
  • Windows 10設定 > 時刻と言語 > 地域タブ > データ形式を変更する
2

引数「日付」が日付形式の文字列なら、それを日付型に変換してから Windows の形式の文字列に変換します。

引数「形式」を省略したときは vbGeneralDate が適用されます。

引数「形式」が vbShortTime なら、hh:mm 形式で固定です。

Format 関数」からも同じ形式で変換できます。

使用例

日時を地域に合った形式で文字列に変換する。

Dim s As String
s = FormatDateTime("2000/1/2 3:4:5") ' vbGeneralDate と同じ形式
Debug.Print(s) ' 2000/01/02 3:04:05

s = FormatDateTime("2000/1/2 3:4:5", vbGeneralDate)
Debug.Print(s) ' 2000/01/02 3:04:05

s = FormatDateTime("2000/1/2", vbGeneralDate)
Debug.Print(s) ' 2000/01/02

s = FormatDateTime("3:4:5", vbGeneralDate)
Debug.Print(s) ' 3:04:05

s = FormatDateTime("2000/1/2 3:4:5", vbLongDate)
Debug.Print(s) ' 2000年1月2日

s = FormatDateTime("2000/1/2 3:4:5", vbShortDate)
Debug.Print(s) ' 2000/01/02

s = FormatDateTime("2000/1/2 3:4:5", vbLongTime)
Debug.Print(s) ' 3:04:05

s = FormatDateTime("2000/1/2 3:4:5", vbShortTime)
Debug.Print(s) ' 03:04

Format 関数

Format 関数」を使用して、同じ形式で文字列に変換できます。

Dim s As String
s = Format("2000/1/2 3:4:5", "General Date")
Debug.Print(s) ' 2000/01/02 3:04:05

s = Format("2000/1/2 3:4:5", "Long Date")
Debug.Print(s) ' 2000年1月2日

s = Format("2000/1/2 3:4:5", "Short Date")
Debug.Print(s) ' 2000/01/02

s = Format("2000/1/2 3:4:5", "Long Time")
Debug.Print(s) ' 3:04:05

s = Format("2000/1/2 3:4:5", "Short Time")
Debug.Print(s) ' 03:04