2012-07-21 12 views
6

をこれまでに文字列を変換:VBA Iは、次の形式でExcelシートにデータを持っている

 
ItemCode       DeliveryDate 
5456987        24.01.2009 
5456988           
5456989        12.24.2009 
5456990        12/24/2009 

Iは配列内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関数()関数は、エラーがスローされます:

  • 解析:

    Run-time error '13':

    Type mismatch

    はできVBAでの機能があります文字列はとなり、日付形式はとなり、日付オブジェクトが返されます。

  • 文字列が空であるか型が不正な場合(ループ内での比較のため)、空の日付オブジェクトを返します。

は編集:

エラーを再現するには、単にあなたが念itemDate ISNを作ってみましたが、それは空のデータ行にエラーを投げることができたよう myDate = CDate("24.01.2009")

+0

されていません[http://www.example-code.com /vb/stringtodate.asp]正しいことをしていました...どこにエラーがありますか?どちらの行に - 最初の1行か2行目(空の文字列)?文字列形式を変更しようとしましたか?日付文字列を解析する方法の形式を変更したい場合があります。 「2009年12月24日」は認識されないかもしれませんが、12/24/2009のみを変換し、それが動作するかどうかを確認してください。それがうまくいけば、24.01.2009フォーマットは受け入れられないかもしれません。 –

+0

2009/12/24を変換して動作するか試してみてください。それがうまくいけば、dd.MM.yyyyという形式はCDateのために使用できないかもしれません。どのようにフォーマットされているかを指定する方法があるかもしれません。 dd.MM.yyyy形式が問題の原因になっている場合は、最初に "。" "/"を付けてもう一度変換しようとします。または、MM/dd/yyyyになるようにフォーマットしてから変換します。私はちょうど "12/24/2009"が間違っているかどうかを知りたいと思う。最初に確認して、私に知らせてください。 –

+0

@AnnB。、よく私の最初の質問です。 *任意の*日付形式で文字列を解析し、日付オブジェクトを返すことができるVBA関数はありますか? –

答えて

8

Replaceを試してみてください。上記の数回述べた問題は、CDate関数がその期間に窒息していることです。 replaceを使用して、スラッシュに変更することができます。任意の日付形式を解析できるvbaの関数に関する質問に答えるために、非常に限られたオプションはありません。

ws.Range( "A:A")

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) 
+0

@JasonWilliams私は答えに追加します。あなたは "0"を使用したいですか?Time(12:00:00 AM) )日付ではありません。 –

0

が見える実行CDate()関数を実行する前に空ではありませんか?私はこれがあなたの問題かもしれないと思います。

+0

いいえ、その場合はありません。編集を確認してください。 –

+1

それはあなたがそこにあなたのデータを置くときに便利だったでしょう。 –

+0

CDate()に必要な書式をチェックしましたが、これは[類似のスレッド]がない場合に便利です(http://stackoverflow.com/questions/7481309/vba-issues-converting-string-to-date -using-format-or-cdate)を使用します。見た目から、あなたが渡している日付を再フォーマットしなければならないかもしれません。 –

0

私はこのコードを使用する。FormulaR1C1 = "= DATEVALUE(RC [1])"

カラムAはなりMM/DD/YYYY

RCは、[1]の列B、テキスト文字列、例えば、01/30/12で、これは、このサイトによるとDATEのTYPE

+0

これは本当に質問に答えません。彼らは、VB/VBA/Excelの関数で処理されていない 'dd.mm.yyyy'を解析しようとしていました。 – Deanna

関連する問題