人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: ryo-blackcomb
●カテゴリ:コンピュータ
✍キーワード:MM VBA xls シリアル データ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kn1967
●100ポイント

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

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

ActiveWorkbook.ActiveSheet.Cells(i, 3) = IsDate("01/01/01 " & Format(ActiveWorkbook.ActiveSheet.Cells(i, 2), "hh:mm:dd"))
◎質問者からの返答

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

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


2 ● pahoo
●50ポイント

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

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


1.書式を調べる

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


2.値を調べる

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

◎質問者からの返答

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


3 ● SALINGER
●100ポイント

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

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

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

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

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

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

◎質問者からの返答

なるほど。

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

大変参考になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ