2010-12-02 12 views
1

私はAccess VBAでExcelワークブックを処理しています(Reading an Excel workbook from Access参照)。これで、セルに有効な時間値が含まれているかどうかを確認したいと思います。私はIsDate()を使用し、それは正常に動作する日付の。Access VBAでExcelの時刻値を確認する方法?

しかし、時間値では(IsTime()がないため、時間値にIsDate()も使用します)。または、時間の値が倍精度として格納されるため、IsNumericを使用する必要がありますか?

IsDate()はTRUE(!?)を返しますが、Excel自体は時刻値として認識しません。また、VBAデバッガはテキスト文字列として表示します。

"12:00:00"のIsDate()はFALSEを返しますが、Excel自身がそれを時間値として認識すると、VBAデバッガは値0,5を表示します。

誰か?

UPDATE 9/12:@belisariusへ

おかげで、mwolfe02 @私は私の状況のた​​めにこれを見つけた:

/* Valid time value */ 
IsDate() = False, 
IsNumeric() = True, 
TypeName() = Double 

/* Numeric (no time) value */ 
IsDate() = False, 
IsNumeric() = True, 
TypeName() = Double 

/* Valid date value */ 
IsDate() = True, 
IsNumeric() = False, 
TypeName() = Date 

/* Invalid time value (e.g. with leading space as in above example) */ 
IsDate() = True, 
IsNumeric() = False, 
TypeName() = String 

だから私は唯一TypeName()場合戻りDoubleIsNumeric() Trueをチェックすると、混乱を避けるために必要があります値が> = 0で<の場合は「通常の」数値で表示されます1.右か?

答えて

4

二つの異なる概念があります。

1)日付&時刻の形式

日付を格納するためのExcelのセル(および/または)時間をフォーマットすると、Excelが内部表現を使用しています。 MS:
デフォルトでは、1900年1月1日はシリアル番号1で、1900年1月1日より39,448日後のため、2008年1月1日はシリアル番号39448です。Macintosh用Microsoft Excelは、デフォルトです。 シリアル番号の小数点以下の桁は時刻を表します。左の数字は日付を表します。たとえば、シリアル番号.5は時刻12:00の正午を表します。

これだけです。日時は10進数で保存されます。 VBA 日付/時刻

これはチェックをISDATE何に変換することができることを

2)観光情報。 MS:

式を日付に変換できるかどうかを示すブール値を返します。
IsDateによって返されるTrueは、セルが日付/時刻としてフォーマットされていることを意味するものではなく、となる可能性があります。はこの値を日付/時刻に変換します。しかし悪化すると、この関数はプラットフォームによって異なる値を返す可能性があります。Microsoft Windowsでは、有効な日付の範囲は100年1月1日から9999年12月31日までです。範囲はオペレーティングシステムによって異なります。

明らかに、Excelはセルの内容を日付/時刻として検証しなかったということです。ユーザーが入力した文字(例のスペース)を含むテキストはほぼ確実です。 VBAは値を日付に変換することはできませんが、フォーマットを知っている場合(変換のアドホック関数を記述している場合)は可能です。

HTH!

編集 回答はthis questionになると思います。

+0

包括的な回答をいただきありがとうございます。私はまだ問題を完全には理解していませんが、私の状況について私は正しい情報を持っています(私は思っています)、私は私の質問に対する答えとして私の発見を追加します – waanders

関連する問題