大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで文字列や数値を日付に変換する方法についてご紹介します。文字列や数値を日付に変換すれば、簡単に日付の比較や計算ができます。文字列や数値を日付に変換するポイントを『CDate』、『Format』、『IsDate』を使って説明していきます。

はじめに

この記事では、文字列や数値を日付型に変換する方法についてご紹介します。

文字列や数値を日付型に変換できれば、簡単に日付の比較や計算ができます。

数値を日付型に変換するには、少し工夫が必要です。

文字列や数値を日付に変換する際のポイントを、『CDate』、『Format』、『IsDate』を使って説明していきます。

この記事で紹介すること

  • 文字列を日付型へ変換する
  • 数値を日付型へ変換する

目次から見たい項目へ移動すると便利ですよ。

目次

ポイントとなるVBAコード

初めに、ポイントとなるVBAコードを記載しておきます。

VBAコードだけ確認すればいいという場合に、ご活用ください。

Dim A
'日付型に変換
A = CDate("2020/1/1")
'数値を日付型に変換
A = CDate(Format(20200101, "@@@@/@@/@@"))

では、説明していきます。

VBAでCDateを使って文字列を日付に変換

文字列を日付に変換するには、『CDate』を使えばできます。

文字列『"2020/1/1"』の日付を日付型に変換できます。

日付型に変換するメリットは、日付の比較や計算ができる点です。

日付を足し算したり、日付の比較をしたい場合は、CDateを使って日付型に変換しましょう。

使い方(CDate)

文字列を日付に変換するCDateは次のように入力します。

『日付 = CDate(日付の文字列)』

CDateに入力する値は、日付と認識できる文字列である必要があります。

では、文字列の日付を日付型に変換してみます。

文字列を日付に変換

文字列の日付を日付型に変換するVBAコードです。

文字列『"2020/1/1"』を日付『2020/01/01』に変換しています。

Sub TEST1()
    
    MsgBox CDate("2020/1/1") '日付型に変換
        
End Sub

実行してみます。

文字列を日付に変換

CDateを使って文字列の日付を日付型に変換した結果

日付型『2020/01/01』に変換できました。

CDateを使えば、文字列を日付型に変換できます。

日付型に変換できれば、簡単に日付を比較したり、計算することができます。

VBAで数値を日付に変換

つづいて、数値を日付に変換する方法をご紹介します。

数値8桁『20200101』を日付に変換したい場合です。

数値を日付に変換する場合は、少し工夫が必要です。

数値自体はCDateで日付と認識できないためです。

ちょっとやってみます。

日付と認識できないとCDateはエラーとなる

日付と認識できない場合、CDateはエラーとなります。

数値『202001010』をCDateを使って日付型に変換しようとしてみます。

Sub TEST2()
    
    MsgBox CDate(20200101) '日付型に変換⇒エラーになります
    
End Sub

実行してみます。

数値を日付に変換:エラーとなります

CDateを使って数値を日付型に変換した結果

結果は、エラーとなりました。

数値を日付型に変換する際に、CDateが日付と認識できないため、エラーとなります。

この問題点を解消する方法は、CDateが日付と認識できる文字列へ変換してやることです。

FormatとCDateを組み合わせる

数値を文字列へ変換するには、Formatを使ってCDateが認識できる文字列へ変換します。

やってみます。

数値『20200101』を日付の文字列に変換して、日付型『2020/01/01』に変換するVBAコードです。

Sub TEST3()
    
    Dim A
    
    '日付の文字列に変換
    A = Format(20200101, "@@@@/@@/@@")
    
    '日付型に変換
    MsgBox CDate(A)
        
End Sub

実行してみます。

数値をFormatとCDateを使って、日付に変換

数値を日付の文字列に変換して、日付型に変換した結果

結果は、日付型『2020/01/01』に変換できました。

数値を日付と認識できる文字列に変換すれば、CDateで日付型に変換できます。

ちなみに、文字列『"20200101"』も同じ方法で、日付型に変換できます。

やってみます。

Sub TEST4()
    
    Dim A
    
    '日付の文字列に変換
    A = Format("20200101", "@@@@/@@/@@")
    
    '日付型に変換
    MsgBox CDate(A)
        
End Sub

実行してみます。

文字列をFormatとCDateを使って、日付に変換

文字列を日付型に変換した結果

結果は、『2020/01/01』となりました。

日付と認識できない文字列を、日付型に変換できました。

数値などの日付と認識できない値を日付型に変換したい場合は、FormatとCDateを組み合わせて日付型に変換しましょう。

日付に変換できるかを判定して変換

先ほど説明したように、文字列や数値を日付に変換するに、日付と認識できない場合は、エラーとなってしまいます。

エラーがでるとVBE画面がでてきてちょっと困惑してしましますので、あらかじめエラー処理をしておくといいです。

日付に変換できるかを判定するには、『IsDate』を使うとできます。

IsDateの使い方

文字列が日付として認識できるかを判定する『IsDate』は次のように入力します。

『判定結果 = IsDate(文字列)』

判定結果は、

  • 日付に変換できる:True
  • 日付に変換できない:False

となります。

では、文字列『"2020/1/1"』を日付に変換できるかを判定して、日付型に変換してみます。

Sub TEST5()
    
    Dim A
    A = "2020/1/1"
    
    '日付と認識できるかを判定
    If IsDate(A) = True Then
        MsgBox CDate(A) '日付型に変換
    End If
    
End Sub

実行してみます。

日付に変換できるかを判定して日付に変換

IsDateを使って、文字列を日付型に変換できるかを判定して日付型に変換した結果

文字列『"2020/1/1"』は日付として認識できるので、日付型『2020/01/01』に変換できました。

ユーザーに日付を入力させて、日付型に変換するという場合は、IsDateを使って日付に変換できるかを判定した方がいいです。

日付型に変換すると比較や計算ができる

最初に説明したように、日付型に変換するメリットは、日付の比較や計算ができる点です。

ちょっと簡単な例で日付の比較や計算をしてみます。

日付型にして日付を比較する

文字列を日付型に変換して比較してみます。

次の例は、文字列『"2020/1/1"』と『"2020/01/02"』を日付型に変換して比較したVBAコードです。

Sub TEST6()
    
    Dim A, B
    A = CDate("2020/1/1") '日付型に変換(2020/01/01)
    B = CDate("2020/01/02") '日付型に変換(2020/01/02)
    
    '日付を比較
    If A < B Then
        MsgBox B & "の方が大きい"
    Else
        MsgBox A & "の方が大きい"
    End If
    
End Sub

実行してみます。

日付を比較

CDateを使って文字列を日付型に変換して比較した結果

結果は、『2020/01/02の方が大きい』となりました。

日付を正しく比較できています。

日付型にして日付を計算する

次に、文字列を日付型に変換して日付を計算してみます。

次の例は、文字列『"2020/1/1"』と『"2020/1/11"』の差分をとって、日付間の日数を計算するVBAコードです。

Sub TEST7()
    
    Dim A, B
    A = CDate("2020/1/1") '日付型に変換(2020/1/1)
    B = CDate("2020/1/11") '日付型に変換(2020/1/11)
    
    '日付の差分をとる
    MsgBox B - A
        
End Sub

実行してみます。

日付を計算

CDateを使って文字列を日付型に変換して差分をとって計算した結果

結果は、『10』日間となりました。

日付を正しく計算できています。

日付を表示するだけではなく、比較や計算をしたい場合には、『CDate』を使って日付型に変換しましょう。

おわりに

この記事では、文字列や数値を日付型に変換する方法についてご紹介しました。

文字列を日付型に変換するには、『CDate』を使えばできます。

数値を日付型に変換するには、『Format』と『CDate』を組み合わせて日付型に変換しましょう。

ユーザーに日付を入力させるような場合には、入力ミスを想定しておいて『IsDate』でエラー処理をするといいです。

日付の比較や計算をしたい場合は、『CDate』を使って日付型に変換しましょう。

参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す