関数・メソッド

日付データかどうか判断する【IsDate関数】【ExcelVBA】

構文

IsDate(Expression)  As Boolean

Expression・・・ 日付として評価する文字列
戻り値 ・・・・・Boolean型 日付データならTrue/日付データ以外はFalse
Expressionに指定したが日付型かどうか判別します。
(日付データ以外はFalseとなります)

IsDate関数のサンプルコード

Public Sub sample_isDate()

    '■True よくあるパターン
    Debug.Print IsDate("2021/1/21")         'True※yyyy/m/d
    Debug.Print IsDate("2021/01/21")        'True※yyyy/mm/dd
    Debug.Print IsDate("令和3年01月21日")   'True※元号
    Debug.Print IsDate("R3/1/21")           'True※元号略式
    Debug.Print IsDate("21/1/21")           'True※yy/m/d
    Debug.Print IsDate("令和03/01/21")      'True
    Debug.Print IsDate("2021-1-21")         'True※ハイフンあり
    
    '■False yymmddの6桁 or yyyymmddの8桁数字は不可
    Debug.Print IsDate("210121")        'False
    Debug.Print IsDate("20210121")        'False
  ’■yyyymmddの8桁数字はFormat関数で変換すればOK
    Debug.Print IsDate(Format("20210121", "####/##/##"))'True


    '■False yyyy.mm.ddのドット区切りは不可
    Debug.Print IsDate("2021.1.21")       'False
    '■False 年号だけなどの日付の一部は不可。
    Debug.Print IsDate("2021")            'False
    Debug.Print IsDate("R03")             'False
    Debug.Print IsDate("令和3年")         'False
    
    '■True 年号はなくても日付として判断
    Debug.Print IsDate("01/01")           'True

    '■True 英語形式でも日付として判断
    Debug.Print IsDate("January,21,2021") 'True

    Debug.Print IsDate("2021/01/21 12:00:00")   'True※日付+時刻
    Debug.Print IsDate("12:00:00")              'True※時刻
    Debug.Print IsDate("12時")                  'True※時刻

End Sub

注意点

  • エクセルでは日付や時刻はシリアル値で管理していますが、シリアル値以外もTrueの場合があります。
    例)数字が全角文字の場合  isDate(“令和3年1月21日”)はTrueです。
  • 逆に日本人が見たら日付データと判断できる文字が、Falseの場合があります。
    例)数字が漢字の場合  isDate(“令和三年一月二十一日”)はFalseです。
  • シリアル値かどうかを判断する場合は、isNumeric関数を使用しましょう。

関連記事

文字列を日付データに変換する【CDate関数】【ExcelVBA】
年/月/日から日付データを取得する【DateSerial関数】【ExcelVBA】
西暦→和暦変換-和暦→西暦変換【DATEVALUE関数】【ExcelVBA】
【VBA一覧】西暦、和暦変換のエクセル年号一覧

コメント

タイトルとURLをコピーしました