2016-09-07 3 views
0

私はデータセット(n)を持っていますが、エクセルが認識しないDD.MM.YYYY形式の日付で約1500項目の長さが入ります。私の目標は、それを優れたものに変えることです。これが私のやり方です。日付変換ループを最適化する

Function date_to_excel() 
Call public_dims 

Dim date_i As String 
date_array = ThisWorkbook.Sheets("Spread").Range(Cells(7, 5), Cells(7 + n, 5)) 

For i = 0 To n 
date_i = ThisWorkbook.Sheets("Spread").Cells(7 + i, 5) 
    If date_i <> "" Then 
    date_array = Split(date_i, ".") 
    date_i = date_array(1) & "/" & date_array(0) & "/" & date_array(2) 
    ThisWorkbook.Sheets("Spread").Cells(7 + i, 5) = date_i 
    End If 
Next 

End Function 

この機能は正常に機能しますが、実際にはかなり時間がかかります。 私がコミュニティに求めているのは、このループを最適化する方法に関するアイデアです。日付を配列全体に追加してみてみましたが、それを見ても、日付形式(date_i =行の終わり近く)を変更する方法とは互換性がないようです。

+0

おそらく、単に「置換」を行うことができます。 '.'を見つけ、'/'で置き換えます。 –

+1

セルを「カスタム」としてフォーマットし、カスタムフォーマットを「dd.mm.yyyy」と設定すると、Excelはセル内の値を日付 – Zac

+0

@ Zacとして認識しません。動作していない –

答えて

1

DMY列形式でテキストを列機能に使用できます。

ThisWorkbook.Sheets("Spread").Range("E7:E" & 7 + n).TextToColumns _ 
           DataType:=xlDelimited, FieldInfo:=Array(1, xlDMYFormat) 
+0

シンプルで速い –

+0

スーパーシンプルなソリューションは、迅速かつ仕事をしてくれます - ありがとう、私は将来にわたって多くの時間を使用します! –

0

はい、それは移動するための方法です...

を「私は、Arrayに日付を範囲全体を追加し、そのを通して見て試してみました」。シート上のセルに1度に1つずつ読み書きすることは、多くの時間を要することです。

Dim vData as Variant 
Dim vDates() as Date 
ReDim vDates(1 to n, 1 to 1) as Date 
Dim i as Long 

vData = ThisWorkbook.Sheets("Spread").Range("E7").Resize(n,1).Value 

For i = 1 to n 
    vDates(i,1) = DateSerial(Split(vData(i,1),".")(2),vData(i,1),".")(1),vData(i,1),".")(0)) 
Next 

ThisWorkbook.Sheets("Spread").Range("E7").Resize(n,1).Value = vDates 
+0

OPは彼のコードで空の文字列チェックを持っていましたが、良い仕事+1です。 –