更新日:、 作成日:
VBA 日付を変換する
はじめに
Excel VBA マクロの日付 (Date) を文字列へ変換する方法を紹介します。
日付を文字列型 (String) に代入して、既定の形式で文字列に変換できます
「Format 関数」から、日付の書式や形式を指定して文字列に変換できます。
「Year 関数、Month 関数、Day 関数」から、年月日を取得できます。
「Hour 関数、Minute 関数、Second 関数」から、時分秒を取得できます。
日付を文字列に変換する
日付を文字列型 (String) に代入すると、文字列に変換できます。
Dim s As String
s = #1/2/2013#
Debug.Print(s) ' 2013/01/02
s = CDate("2012/3/4")
Debug.Print(s) ' 2012/03/04
s = CDate("1:23:45")
Debug.Print(s) ' 1:23:45
文字列に変換したときの形式は、Windows の「日付の短い形式」と「時刻の長い形式」になります。
時刻だけを文字列にしたときの日付は 1899/12/30 です。この日は時刻を表すために日付が表示されません。この日を表示するには、次の「Format 関数」を使用します。
Format 関数
「Format 関数」を使用して、指定した書式の文字列に変換できます。
引数には (値, 書式) を指定します。書式には次のものがあります。
書式 | 例 | 結果 | 説明 |
y | yyyy | 2000 | 年を表示します。書式一つが下一桁を表しています。 |
m | mm | 01 | 月を表示します。 mm のようにすると 2 桁で表示します。日時分秒でも同じです。 |
d | d | 2 | 日を表示します。 |
h | hh | 03 | 時を表示します。 |
n | n | 4 | 分を表示します。 |
s | s | 56 | 秒を表示します。 |
Dim d As Date
d = "2000/1/2 3:4:56"
Debug.Print(Format(d,"yyyy/m/d")) ' 2000/1/2
Debug.Print(Format(d,"yyyy年mm月dd日")) ' 2000年01月02日
Debug.Print(Format(d,"h:n:s")) ' 3:4:56
Debug.Print(Format(d,"hh:nn:ss")) ' 03:04:56
紹介している書式は一部です。書式は Excel の表示形式とほぼ同じです。
FormatDateTime 関数
「FormatDateTime 関数」を使用して、Windows の日付と時刻の形式を指定して変換できます。
引数には (日付, 形式) を指定します。形式には次のものがあります。
書式 | 結果 | 説明 |
vbGeneralDate (既定) | 2000/01/02 3:04:05 | 日付と時刻の一方または両方を表示します。日付部分がある場合は「短い形式」として表示します。時刻部分がある場合は「長い形式」として表示します。 |
vbLongDate | 2000年1月2日 | 日付の「長い形式」を使用して日付を表示します。 |
vbShortDate | 2000/01/02 | 日付の「短い形式」を使用して日付を表示します。 |
vbLongTime | 3:04:05 | 時刻の「長い形式」を使用して時刻を表示します。 |
vbShortTime | 03:04 | 24 時間形式 (hh:mm) を使用して時刻を表示します。 |
Dim d As Date
d = "2000/1/2 3:4:5"
Dim s As String
s = FormatDateTime(d)
Debug.Print(s) ' 2000/01/02 3:04:05
s = FormatDateTime(d, vbLongDate)
Debug.Print(s) ' 2000年1月2日
s = FormatDateTime(d, vbShortDate)
Debug.Print(s) ' 2000/01/02
s = FormatDateTime(d, vbLongTime)
Debug.Print(s) ' 3:04:05
s = FormatDateTime(d, vbShortTime)
Debug.Print(s) ' 03:04
vbGeneralDate を指定するか省略したときと、日付を文字列型に代入したときの結果が同じになります。
スポンサーリンク
日付を数値に変換する
日付型の初期値 1899/12/30 が数値の 0 に変換されます。日付が 1 日増えるごとに数値も 1 増えます。
時刻は小数で表します。数値の 1 が 1 日になるので時間は次のように計算できます。
- 1 時:1 / 24
- 1 分:1 / 24 / 60
- 1 秒:1 / 24 / 60 / 60
Dim d As Double
d = CDate("1899/12/30")
Debug.Print(d) ' 0
d = CDate("1899/12/31")
Debug.Print(d) ' 1
d = CDate("1899/12/29")
Debug.Print(d) ' -1
d = CDate("1:0:0")
Debug.Print(d) ' 4.16666666666667E-02
d = CDate("0:1:0")
Debug.Print(d) ' 6.94444444444444E-04
d = CDate("0:0:1")
Debug.Print(d) ' 1.15740740740741E-05
年月日、時分秒
「Year 関数、Month 関数、Day 関数」を使用して、年月日を取得できます。
「Hour 関数、Minute 関数、Second 関数」を使用して、時分秒を取得できます。
Dim d As Date
d = "2013/1/2 3:4:5"
Debug.Print(Year(d)) ' 2013
Debug.Print(Month(d)) ' 1
Debug.Print(Day(d)) ' 2
Debug.Print(Hour(d)) ' 3
Debug.Print(Minute(d)) ' 4
Debug.Print(Second(d)) ' 5
曜日
「Weekday 関数」を使用して、日付の曜日を取得できます。
Dim d As Date
d = "2013/1/6"
Debug.Print(Weekday(d)) ' 1、日曜日
d = "2013/1/12"
Debug.Print(Weekday(d)) ' 7、土曜日