VBATips

時刻データかどうか判断する【IsDate関数応用】【ExcelVBA】

時刻データかどうかを判断したい

IsDate関数は日付データの判断をする関数です。
IsTime関数といったものがあればいいのですが、VBAには存在しません。
IsDate関数を応用し、日付データなのか時刻データ(時間データ)なのか判別したいと思います。

時刻かどうか判断するサンプルコード

'■日付or時刻or日付時刻データを判断する
Public Function call_isTime(str As String)
    If IsDate(str) Then
        If CDate(str) < 1 Then
            call_isTime = "時刻のみ"
        ElseIf CDate(str) = Int(CDate(str)) Then
            call_isTime = "日付のみ"
        Else
            call_isTime = "日付/時刻"
        End If
    Else
        call_isTime = "日付データではない"
    End If
End Function

使い方

Public Sub sample()

    Debug.Print call_isTime("2021/01/22 12:00:00")  '日付/時刻
    Debug.Print call_isTime("2021/01/22")           '日付
    Debug.Print call_isTime("12:00:00")             '時刻
    Debug.Print call_isTime("23時")                 '時刻
    
    
    '■問題点 24時以上のデータは日付データ/時刻データとは判断できません
    Debug.Print call_isTime("24:00:00")             'それ以外
End Sub

注意点

  • シリアル値では日付は整数、時刻は小数点で表されます。
    Int関数を使用して、下記を判断します。
IsDateで日付データかどうか判断した後、以下判別をします。
・CDate関数で、1より小さい数値である→時刻データ
・CDate関数で、小数点を切り上げた数値と一致する→日付データのみ
・CDate関数で、小数点を切り上げた数値と一致しない→日付時刻データ

関連記事

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

コメント

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