※http://www.filebox100.net fb10083.xls にデータと試作マクロを添付しました。
時刻部分だけだと不十分なためIsDate関数はFalseを返してきます。
対策としては日付型となるように不足分を補填するようにします。
ActiveWorkbook.ActiveSheet.Cells(i, 3) = IsDate("01/01/01 " & Format(ActiveWorkbook.ActiveSheet.Cells(i, 2), "hh:mm:dd"))
IsDate 関数は「日付」検査用です。VBA には時刻検査関数は用意されていません。
方法は2つ考えられます。
NumberFormatLocal プロパティによって、表示書式が "hh:mm" であるかどうかを調べる。
時刻のシリアル値は1.0未満、一方の日付は1.0以上なので、値が1.0未満のセルは「時刻」と判断する。
ありがとうございました。
IsDateは文字列を日付型に変換できるかを調べる関数です。
そして日付型は時刻も含まれるので、時刻も調べられますよ。
配布されたExcelファイルのように、B列に"hh:mm"と書式が設定されているなら、
ActiveWorkbook.ActiveSheet.Cells(i, 3) = IsDate(ActiveWorkbook.ActiveSheet.Cells(i, 2).Text)
とtextプロパティで、直接表示されている値を取得して調べればいいです。
valueだとシリアル値が返るのので、IsDateはシリアル値かどうかを調べる関数ではないのでFalseを返すわけです。
なるほど。
実はkn1967さんの方法で元プログラムの大改造(?)とデータ検証を完了してしまったのですが、こっちのほうがスマートだなぁ。
大変参考になりました。
ご教示のとおりやってみたらうまくいきました。
format関数を活用する点も参考になりました。