日付(Date型)から文字列に変換する
Date型の日付を文字列に変換する方法を紹介します。Date型の変数には年月日だけでなく時刻も保持されています。
そのため、年月日文字列に変換する際には時刻部分を除外することになります。もちろん時刻部分のみの文字列を取得することも可能です。
それらの変換にはFormat関数やFormatDateTime関数を利用します。
Format関数とFormatDateTime関数のどちらを使っても構いませんがそれぞれ一長一短があります。Format関数の方は書式を指定しなければならない点があり、FormatDateTime関数は書式の指定は不要ですが日本だったら年月日yyyymmdd、英語圏だったら日月年ddmmyyyyといったPCの地域設定に依存するという違いがあります。
なお、上記とは逆の、文字列から日付への変換は「VBAで文字列から日付(Date型)に変換する」をご参照ください。
Format関数を使って変換する
Format関数を使う場合は第一引数にDate型の変数、第二引数に書式を設定し、その書式に変換した文字列を戻り値として取得します。
例として、年月日の2種類(yyyy/mm/dd、yyyymmdd)と時分秒のコードが以下になります。
Format関数の第二引数の書式については詳細を後述します。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Sub DateToStringFormat()     Dim dt  As Date     Dim s   As String     dt = CDate("2018/04/02 12:34:56")     '// 年月日(スラッシュ区切り)     s = Format(dt, "yyyy/mm/dd")     Debug.Print s     '// 年月日(8桁)     s = Format(dt, "yyyymmdd")     Debug.Print s     '// 時分秒     s = Format(dt, "hh:mm:ss")     Debug.Print s End Sub | 
実行結果
2018/04/02
20180402
12:34:56
日付の書式記号
日付はy(年yearのy)、m(月monthのm)、d(日dayのd)、g(元号gengouのg?)、e(紀元eraのe?)、a(曜日)の5文字を利用します。
以下の表の表示値欄は2017/9/28の場合の値になります。
“年”などの追加したい文字を””で囲うと表示することができます。
| 書式記号 | 内容 | 表示値 | 
|---|---|---|
| “g” | 元号の英字表記 | H | 
| “gg” | 元号の漢字の省略表記 | 平 | 
| “ggg” | 元号 | 平成 | 
| “e” | 和暦1桁 | 29 | 
| “ee” | 和暦2桁 | 29 | 
| “yy” | 西暦2桁 | 17 | 
| “yyyy” | 西暦4桁 | 2017 | 
| “m” | 月を1桁表記 | 9 | 
| “mm” | 月を2桁表記 | 09 | 
| “mmm” | 月を英語の省略表記 | Sep | 
| “mmmm” | 月を英語表記 | September | 
| “d” | 日を1桁表記 | 28 | 
| “dd” | 日を2桁表記 | 28 | 
| “ddd” | 曜日を英語の省略表記 | Thu | 
| “dddd” | 曜日を英語表記 | Thursday | 
| “aaa” | 曜日の漢字の省略表記 | 木 | 
| “aaaa” | 曜日の漢字を表記 | 木曜日 | 
| “ggge年m月d日(aaaa)” | 和暦の年月日と曜日 | 平成29年9月28日(木曜日) | 
時刻の書式記号
時刻はh(時hour)、m(分minute)、s(秒second)、AM、PM、の5種類を利用します。
以下の表の表示値欄は23:01:40の場合の値になります。表の下から2番目の行の24時超えの場合のみ123:01:40の場合の値です。
時・分・秒には表現できる範囲がありますが、[h]や[m]や[s]のように[]で囲うと上限を超えて経過時間として表示できます。
また、日付と同様に”時”などダブルクォーテーションで追加したい文字を表示することができます。
| 書式記号 | 内容 | 表示値 | 
|---|---|---|
| “h” | 0~23時 | 23 | 
| “hh” | 00~23時 | 23 | 
| “m” | 0~59分(hやsと一緒に使用すると分とみなされる。右の表示値はh:m) | 23:1 | 
| “mm” | 00~59分(hやsと一緒に使用すると分とみなされる。右の表示値はhh:mm) | 23:01 | 
| “s” | 0~59秒 | 40 | 
| “ss” | 00~59秒 | 40 | 
| “h AM/PM” | 0~23時を12時間ずつでAM/PM表記 | 11 PM | 
| “h:mm AM/PM” | 0:00~23:59を12時間ずつでAM/PM表記 | 11:01 PM | 
| “h:mm:ss A/P” | 0:00:00~23:59:59を12時間ずつでAM/PM表記 | 11:01:40 P | 
| “[h]:mm:ss” | 24時を超える表記可能な時刻 | 123:01:40 | 
| “h時m分s秒” | 時分秒表記 | 23時1分40秒 | 
FormatDateTime関数を使って変換する
FormatDateTime関数は地域設定によって結果が変わります。
WindowsOSによって異なりますが、Windows7であれば、コントロールパネル→地域と言語→形式タブ→形式 で選択した言語が影響します。
以下のコードは日本語のPCと英語のPCでは結果が異なります。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Sub DateToStringFormatDateTime()     Dim dt  As Date     Dim s   As String     dt = CDate("2018/04/02 12:34:56")     s = FormatDateTime(dt, vbGeneralDate)     Debug.Print s     s = FormatDateTime(dt, vbLongDate)     Debug.Print s     s = FormatDateTime(dt, vbLongTime)     Debug.Print s     s = FormatDateTime(dt, vbShortDate)     Debug.Print s     s = FormatDateTime(dt, vbShortTime)     Debug.Print s End Sub | 
実行結果
・地域と言語の設定が日本語の場合
2018/04/02 12:34:56
2018年4月2日
12:34:56
2018/04/02
12:34
・地域と言語の設定が英語の場合
02/04/2018 12:34:56
02 April 2018
12:34:56
02/04/2018
12:34