時刻データかどうかを判断したい
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関数で、1より小さい数値である→時刻データ
・CDate関数で、小数点を切り上げた数値と一致する→日付データのみ
・CDate関数で、小数点を切り上げた数値と一致しない→日付時刻データ
関連記事
文字列を日付データに変換する【CDate関数】【ExcelVBA】
年/月/日から日付データを取得する【DateSerial関数】【ExcelVBA】
西暦→和暦変換-和暦→西暦変換【DATEVALUE関数】【ExcelVBA】
【VBA一覧】西暦、和暦変換のエクセル年号一覧
コメント