大体でIT

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

大体でIT

Excel VBAで文字列が日付かどうかをチェックして判定する方法についてご紹介します。日付かどうかの判定は、IsDateを使うとできます。IsDateを使う場面としては、文字列を日付型に変換するときです。日付と認識できない場合、エラーとなってしますので、エラー処理をするためIsDateが使えます。

はじめに

この記事では、文字列が日付として認識されるかを判定するIsDateについて、ご紹介します。

IsDateを使う場面としては、文字列を日付型に変換するときです。

日付型ではない場合の処理を、IsDateを使ってあらかじめ組んでおけば、突然エラーがでてきて困るといったことを防げます。

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

この記事で紹介すること

  • 日付かどうかを判定する方法
  • 文字列を日付に変換する際にエラー処理をする方法

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

目次

ポイントとなるVBAコード

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

VBAコードだけ確認したいという場合にご活用ください。

'日付かどうかを判定する
If IsDate(a) = True Then

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

VBAでIsDateを使って日付かどうかを判定する

日付かどうかを判定する方法についてご紹介します。

VBA関数のIsDateを使えばできます。

日付かどうかを判定する場面としては、文字列から日付型へ日付を変換する場合です。

日付型へ変更するCDateを使って変換する際に、文字列が日付に変換できないとエラーとなってしまいます。

なので、IsDateを使って日付かどうかを判定する方法が使えます。

使い方(IsDate)

では、まず、IsDateの使い方について説明します。

IsDateには、次のように入力します。

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

判定結果としては、

  • 日付と認識できる場合:True
  • 日付と認識できない場合:False

となります。

日付型で判定してみる

では、IsDateを使って日付かを判定してみます。

まずは、日付型『#1/1/2020#』で日付と認識できるかを判定してみます。

Sub TEST1()
    
    a = #1/1/2020# '日付型
    
    '日付と認識できるか判定
    If IsDate(a) = True Then
        MsgBox "日付です"
    Else
        MsgBox "日付ではありません"
    End If
    
End Sub

実行してみます。

日付型を判定

IsDateで日付型が日付と認識できるかを判定した結果

結果は、『日付です』となりました。

日付型なので、もちろん日付と認識できます。

文字列で判定してみる

つづいて、文字列の日付の場合で、日付と認識できるかを判定してみます。

文字列『"2020/1/1"』をIsDateで文字列として認識できるかを判定するVBAコードです。

Sub TEST2()
    
    a = "2020/1/1" '日付の文字列
    
    '日付と認識できるか判定
    If IsDate(a) = True Then
        MsgBox "日付です"
    Else
        MsgBox "日付ではありません"
    End If
    
End Sub

実行してみます。

日付の文字列を判定

IsDateで文字列の日付を日付として認識できるかを判定した結果

結果は、『日付です』となりました。

文字列でも、日付の形式となっていれば日付として認識することができます。

日付と認識できない例

では、日付と認識できない文字列の場合をやってみます。

文字列『"20200101"』をIsDateを使って、日付として認識できるかを判定するVBAコードです。

Sub TEST3()
    
    a = "20200101" '文字列
    
    '日付と認識できるか判定
    If IsDate(a) = True Then
        MsgBox "日付です"
    Else
        MsgBox "日付ではありません"
    End If
    
End Sub

実行してみます。

文字列を判定(日付と認識できない)

IsDateを使って文字列が日付として認識されるかを判定した結果

結果は、『日付ではありません』となりました。

文字列『"20200101"』は日付のようですけど、VBAでは日付としては認識できないということになります。

以上が、IsDateを使って文字列を日付として認識できるかを判定する方法になります。

VBAでエラー処理としてIsDateを使う例

日付かどうかを判定するIsDateは、文字列を日付型に変換する際のエラー処理として使えます。

日付型へ変換する際に、変換できない文字列を入力してしまうと、エラーとなってしまいます。

このような場面で、あらかじめエラー処理として、IsDateを組み込んでおけば、エラーを回避することができます。

では、具体的にVBAコードを交えてIsDateを使う場面について紹介します。

文字列を日付型に変換(変換できないとき)

例えば、InputBoxを使って日付をユーザーに入力してもらうVBAを作る場合を考えます。

次のVBAコードは、ユーザーが入力した日付が日付と認識できない場合に、メッセージを出してエラー処理をします。

Sub TEST4()
    
    a = InputBox("yyyy/mm/dd形式で日付を入力してください")
    
    '日付と認識できるか判定
    If IsDate(a) = True Then
        b = CDate(a) '日付型に変換
        MsgBox "日付型 " & b & " に変換しました"
    Else
        MsgBox "yyyy/mm/dd形式で日付を入力してください"
    End If
    
End Sub

では、VBAコードを実行してInputBoxに、日付として認識できない値『20200101』を入力してみます。

日付以外の文字列を入力

InputBoxに日付以外の文字列を入力する

InputBoxをOKとします。

日付と認識できない場合の処理

IsDateで日付かどうかを判定した結果

結果は、『yyyy/mm/dd形式で入力してください』となります。

このように日付型以外が入力されてしまった場合に、エラーを出さずにメッセージを出せば、ユーザーに適切な日付を入力してもらうことができます。

文字列を日付型に変換(変換できるとき)

ちなみに、InputBoxに正しく日付が入力された場合は、日付に変換されます。

ではやってみます。

先ほどと同じコードで、InputBoxに日付を入力してもらって日付と認識されれば日付に変換するVBAコードとなっています。

Sub TEST5()
    
    a = InputBox("yyyy/mm/dd形式で日付を入力してください")
    
    '日付と認識できるか判定
    If IsDate(a) = True Then
        b = CDate(a) '日付型に変換
        MsgBox "日付型 " & b & " に変換しました"
    Else
        MsgBox "yyyy/mm/dd形式で日付を入力してください"
    End If
    
End Sub

実行するとInputBoxが表示されますので、日付『2020/1/1』を入力してみます。

日付を入力

InputBoxに日付を入力する

InputBoxを実行します。

日付と認識できる場合の処理

InputBoxに入力した日付をIsDateで判定した結果

結果は、『日付型 2020/1/1 に変換しました』となりました。

実際は、この後になにかしらの処理がつづくことなります。

このように、文字列を日付型に変換したいときに、エラー処理としてIsDateを使えば、エラーを回避することができます。

おわりに

この記事では、文字列が日付として認識されるかを判定するIsDateについて、ご紹介しました。

文字列を日付かどうかを判定する場面としては、文字列を日付型に変換する場合です。

日付型ではない場合の処理を、IsDateを使って組んでおけば、突然エラーがでてきて困るといったことを防げます。

日付型への変換を行う場合は、うまくIsDateを使っていきましょう。

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

関連する記事から探す

カテゴリから探す

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

アーカイブから探す