多数の日付を含むスプレッドシートがあります。これらは通常、 または のいずれかに表示されmm/dd/yyyy
ますmm/dd/yyyy hh:mm
。
問題は、日付が常に正しく入力されているとは限らないことです。コード内の日付であることを確認するためにチェックが必要です。
私の最初の考えはIsDate
or をチェックするために使用するCDate
ことでしたが、これは機能していないようでした.日付の代わりに文字列を返していました.
それ以来、これらの関数が期待どおりに機能しないことを示す小さな実験を設定しました。方法論は次のとおりです。
- セル A1 に式を入力します
=DATE(2013,10,28)
=A1*1
数値 (41575) と等しいセル B1 の数式この小さなスクリプトを実行します
Sub test() MsgBox ("Start:" & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value)) ActiveCell.Value = Format(ActiveCell.Value, "mm/dd/yyyy") MsgBox ("After format: " & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value)) ActiveCell.Value = CDate(ActiveCell.Value) MsgBox ("After Cdate: " & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value)) End Sub
スクリプトが開始されると、セルは日付型で、IsDate
true を返します。実行後はFormat
文字列型ですが、IsDate
それでも true を返します。 CDate
また、セルを文字列に変換します。セル B1 も 0 を返します (文字列*1 であるため)。
だから私は質問を要約すると思います:
- セルを文字列に変更するの
Format
はなぜですか?CDate
- セルが日付のように見える文字列だけでなく、日付値を返すようにするにはどうすればよいですか?