日付を思うように比較・格納できないが?

Question 42.1 Excel VBA Borad (掲示板)より Previous Next
はじめまして。常連の方々の的確な回答に いつも目からウロコをこぼしています。
さて、連休を良いことにVBAで遊んでいたのですが、些細な事で座礁してしまい、ココだけが納得できない状態で暫定完成してしまいました。何か基本的な事を見落としているような気がするのですが、アドバイス頂けませんでしょうか?

本日は 2001/05/06 なり
Dim TMP As Variant
   TMP = InputBox("日付", , Date) '実行時にEnterキーを押すものとする。期待値"01/05/06"
   If TMP = False Then Exit Sub    '入力キャンセル時の処理
   Cells(1, 3) = TMP
結果 TMP・・・・・"01/05/06"  Variant/Stringタイプ
   セル1,3・・・94/01/05    Variant/Object/Rangeタイプ
と、セルに入れたとたんに 入力した日付が変わってしまっています。また、直後に下記のように比較しても FALSEが返ってきます。
   If TMP = Date Then
   If Cells(1, 3) = TMP Then
   If Cells(1, 3) = Date Then
TMPを強制的に文字変数にしてエラーを拾って・・・や、Date$を使って文字を置換していっても 期待した動作が可能のような気もするのですが、無用のゴチャゴチャな記述も避けたく、 また、過程に納得がいかず悶々としています(^^;
セル1,3に 01/05/06 と表示し、Date関数で格納したセルと単純に比較出来るようにしたいのですが、いかがなものでしょう? よろしくお願いいたします。
Answer   2001.5.7 ムラジロ~
01/05/06は平成1年5月6日と解釈されます。
school コントロールパネルの地域のオプションで、日付の短い形式を yyyy/mm/dd とすることをお奨めしますが、それができない場合は、
TMP = InputBox("日付", , Date)
    TMP = InputBox("日付", , Format(Date, "yyyy/m/d"))
とするなどする処理が必要になります。
なるほど~
ムラジロ~さん。早速のアドバイスありがとうございます。
コントロールパネルの設定からマズかったとは! 意外な原因でしたし、考えも及びませんでした(^^;

そういう目で見てみると、01/05/06 は平成6年1月5日=1994/01/05 だったんですね(^^)
EXCELが数字の大きさによって、和暦か西暦に加え、年号と見なす順序まで気を使っていてくれていたとは思いもしませんでした。有り難いような ちょっぴり迷惑のような・・・(笑)

食わず嫌いだったFormatも、これを機会に覚えることが出来ました。ありがとうございました。
また座礁したらサルベージお願いします(^^/

 

Excel VBA Macro