(VBA)IsDate関数を「時刻のみ」データに適用してチェックをしたいのですが、hh:mm形式でデータ入力されているのにfalseになってしまいます。どうすれば時刻データ(シリアル値)以外をハネることができるでしょうか。

http://www.filebox100.net fb10083.xls にデータと試作マクロを添付しました。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/07/21 18:54:01
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント100pt

時刻部分だけだと不十分なためIsDate関数はFalseを返してきます。

対策としては日付型となるように不足分を補填するようにします。

ActiveWorkbook.ActiveSheet.Cells(i, 3) = IsDate("01/01/01 " & Format(ActiveWorkbook.ActiveSheet.Cells(i, 2), "hh:mm:dd"))
id:Ryo9508

ご教示のとおりやってみたらうまくいきました。

format関数を活用する点も参考になりました。

2008/07/21 18:39:12
id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント50pt

IsDate 関数は「日付」検査用です。VBA には時刻検査関数は用意されていません。

方法は2つ考えられます。


1.書式を調べる

NumberFormatLocal プロパティによって、表示書式が "hh:mm" であるかどうかを調べる。


2.値を調べる

時刻のシリアル値は1.0未満、一方の日付は1.0以上なので、値が1.0未満のセルは「時刻」と判断する。

id:Ryo9508

ありがとうございました。

2008/07/21 18:39:35
id:SALINGER No.3

回答回数3454ベストアンサー獲得回数969

ポイント100pt

IsDateは文字列を日付型に変換できるかを調べる関数です。

そして日付型は時刻も含まれるので、時刻も調べられますよ。

配布されたExcelファイルのように、B列に"hh:mm"と書式が設定されているなら、

  ActiveWorkbook.ActiveSheet.Cells(i, 3) = IsDate(ActiveWorkbook.ActiveSheet.Cells(i, 2).Text)

とtextプロパティで、直接表示されている値を取得して調べればいいです。

valueだとシリアル値が返るのので、IsDateはシリアル値かどうかを調べる関数ではないのでFalseを返すわけです。

id:Ryo9508

なるほど。

実はkn1967さんの方法で元プログラムの大改造(?)とデータ検証を完了してしまったのですが、こっちのほうがスマートだなぁ。

大変参考になりました。

2008/07/21 18:51:24

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません