分かりやすく、使いやすく。

yyyymmdd 形式の文字列や数値を Date 型に変換する方法

スポンサーリンク

Excel VBA で yyyymmdd 形式の 8 桁の文字列や数値を日付型に変更するサンプルコードの紹介です。

  1. yyyymmdd 形式の値を Date 型に変換する
  2. yyyymmdd 形式の値が日付として正しい場合のみ Date 型に変換する


yyyymmdd 形式の値を Date 型に変換する

まずは 8 桁の文字列を Date 型に変換するサンプルコードです。

VBA(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Option Explicit
 
Sub test()
    Dim yyyymmdd As String
    Dim date1 As Date
    
    ' 変換前の yyyymmdd 形式の文字列
    yyyymmdd = "20180215"
    
    ' 日付型へ変換(Formatでyyyy/mm/dd形式にした後、CDateしている)
    date1 = CDate(Format(yyyymmdd, "@@@@/@@/@@"))
    
    ' 2018/02/15
    Debug.Print (date1)
End Sub 

次は 8 桁の数値を変換するサンプルコードです。文字列のサンプルコードとほとんど同じで、上記のコードとの差異は yyyymmdd のデータ型を String から Long に変更している点だけです。

VBA(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Option Explicit
 
Sub test()
    Dim yyyymmdd As Long
    Dim date1 As Date
    
    ' 変換前の yyyymmdd 形式の数値
    yyyymmdd = 20180215
    
    ' 日付型へ変換(Formatでyyyy/mm/dd形式にした後、CDateしている)
    date1 = CDate(Format(yyyymmdd, "@@@@/@@/@@"))
    
    ' 2018/02/15
    Debug.Print (date1)
End Sub 

yyyymmdd 形式の値が日付として正しい場合のみ Date 型に変換する

事前に IsDate 関数で値が日付として正しいかを判定することができます。サンプルコードは次の通りです。

VBA(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
 
Sub test()
    Dim yyyymmdd As Long
    Dim date1 As Date
    
    ' 変換対象の文字列
    yyyymmdd = "20180230"
    
    ' IsDate で日付として妥当かを確認
    If IsDate(Format(yyyymmdd, "@@@@/@@/@@")) Then
        date1 = CDate(Format(yyyymmdd, "@@@@/@@/@@"))
        MsgBox "Date型に変換しました。" & date1
    Else
        ' 2/30 という日付は存在しない為、このエラーダイアログが表示される。
        MsgBox "日付の形式が不正です。"
    End If
End Sub 
スポンサーリンク
スポンサーリンク