2016-11-16 5 views
0

DateSerialを使用するVBAコードが少しありますが、疑わしい結果が出力されていません。なぜ私は結果をまったく期待していなかったので、私は少し理由を説明したいと思っていました。DateSerialが期待した日付を出力しない

私のコードは次のようになります。

Set rngTestDate = ThisWorkbook.Worksheets("Sheet11").Range("A:A").Find(DateSerial(Year(TheDate1), 1, 1)) 

、出力は次のようになります。

?rngTestDate 
11/1/2016 
?Year(TheDate1) 
2016 
?DateSerial(Year(TheDate1),1,1) 
1/1/2016 

イミディエイトウィンドウを使用して、Sheet11はそれで2016年1月1日を持っていません。しかし、それは2016年1月4日と2016年11月1日を持っています。.Findメソッドは、2011年1月1日を探し、それが見つからなければNothingに設定されることを完全に期待していました。もしそうでなければ、少なくとも次の利用可能な日付を見つけてください。
.Findの方法は、上記のDateSerialの値が与えられている2016年1月4日より2016年11月1日に見つかるのはなぜですか?または、より良い質問があると思います:1/1/2016が見つからない場合、なぜそれがNothingに設定されていませんか?

+1

あなたは '1/1/2016'を探していて、' 11/1/2016'はそれを含んでいます(2文字目から)。 –

+0

Oh wow ...だから私は 'DateSerial'を使っていますが、日付が完全に一致しているかどうかにかかわらず、" 1/1/2016 "の値を含む最も近いものを探していますか? '.Find'は' DateSerial'の出力を文字列のように扱います。 – SalvadorVayshun

答えて

0

Per Vincent Gのコメントでは、その文字列には"1/1/2016""11/1/2016"が含まれていました。 DateSerialオプションに関係なく、日付を文字列として扱っているようです。一度それを完全に理解すると、問題を解決することができました。ありがとう、ヴィンセントG!

関連する問題