VBAで日付から文字列への変換と文字列から日付への変換を紹介します。
日付(Date型)のデータを、書式指定をして表示したい場合、Format関数を使用します。
1 2 3 4 5 6 7 8 |
Sub Sample() Dim 日付 As Date 日付 = "2016/12/01" MsgBox 日付 '2016/12/01 MsgBox Format(日付, "yyyy/m/d") '2016/12/1 MsgBox Format(日付, "yyyy年mm月dd日") '2016年12月01日 MsgBox Format(日付, "ggge年mm月dd日") '平成28年12月01日 End Sub |
文字列(String型)のデータを、日付として扱いたい場合、CDate関数を使用します。
1 2 3 4 5 |
Sub Sample() Dim 日付 As String 日付 = "2016/12/01" MsgBox CDate(日付) '2016/12/01 End Sub |
ただし、CDate関数で変換を行なうためには、文字列データが日付と認識できなければなりません。
1 2 3 4 5 |
Sub Sample() Dim 日付 As String 日付 = "20161201" MsgBox CDate(日付) '実行時エラー End Sub |
このままでは実行時エラーとなってしまうので、IsDate関数を使用して日付として扱えるかどうかを確認してからCDate関数を使用すると実行時エラーを回避できます。
1 2 3 4 5 6 7 8 9 |
Sub Sample() Dim 日付 As String 日付 = "20161201" If IsDate(日付) Then MsgBox CDate(日付) Else MsgBox "日付ではありません" End If End Sub |
上で挙げた例のように、実務では「20161201」のようにYYYYMMDD形式で日付を管理することも多いです。しかし、VBAでは日付型のデータとして扱うことができません。日付型のデータとして扱う場合、文字列を加工する必要があります。
今回は2つ方法をご紹介します。
1 2 3 4 5 6 7 8 |
Sub Sample() Dim 日付 As String 日付 = "20161201" '方法1 MsgBox CDate(Format(日付, "@@@@/@@/@@")) '方法2 MsgBox CDate(Left(日付, 4) & "/" & Mid(日付, 5, 2) & "/" & Right(日付, 2)) End Sub |