7

次の形式のExcelシートにデータがあります。

ItemCode                             DeliveryDate
54569872009年1月24日
5456988                                          
54569892009年12月24日
54569902009年12月24日

DeliveryDateの値を配列に格納しました。日付の基本を決めて、結果を新しいシートに印刷する必要があります。したがって、値を配列に変換する必要があります。

Dim current as Date, highest as Date, result() as Date
For Each itemDate in DeliveryDateArray
    current = CDate(itemDate)
    if current > highest then
         highest = current
    end if
    ' some more operations an put dates into result array
Next itemDate
'After activating final sheet...
Range("A1").Resize(UBound(result), 1).Value = Application.Transpose(result)

残念ながら、CDate()関数は次のエラーをスローします。

実行時エラー「13」:

型の不一致

VBAには次のような機能がありますか?

  • 任意の日付形式で文字列を解析し、操作する日付オブジェクトを返します。
  • 文字列が空または不正な形式の場合(ループでの比較のため)、空の日付オブジェクトを返します。

編集:

エラーを再現するには、単に実行します myDate = CDate("24.01.2009")

4

3 に答える 3

13

Replaceそれがあなたのために働くかどうか見るために使ってみてください。私が見たように、上記で数回言及された問題は、CDate関数が生理を窒息させていることです。replaceを使用して、スラッシュに変更できます。任意の日付形式を解析できるvbaの関数に関する質問に答えるために、オプションが非常に限られているものはありません。

Dim current as Date, highest as Date, result() as Date 
For Each itemDate in DeliveryDateArray
    Dim tempDate As String
    itemDate = IIf(Trim(itemDate) = "", "0", itemDate) 'Added per OP's request.
    tempDate = Replace(itemDate, ".", "/")
    current = Format(CDate(tempDate),"dd/mm/yyyy")
    if current > highest then 
        highest = current 
    end if 
    ' some more operations an put dates into result array 
Next itemDate 
'After activating final sheet... 
Range("A1").Resize(UBound(result), 1).Value = Application.Transpose(result) 
于 2012-07-21T04:00:35.803 に答える
0

空のデータ行でエラーがスローされている可能性があります。CDate()関数を実行する前に、itemDateが空でないことを確認しようとしましたか?これがあなたの問題かもしれないと思います。

于 2012-07-21T03:06:02.630 に答える
-1

私はこのコードを使用しました:

ws.Range( "A:A")。FormulaR1C1 = "= DATEVALUE(RC [1])"

列Aはmm/dd/yyyyになります

RC [1]は列B、TEXT文字列です。例:01/30/12、これは日付型ではありません

于 2012-10-11T08:58:05.163 に答える