优化日期转换循环

时间:2016-09-07 12:42:47

标签: excel vba date

我有一组数据(n),大约1500个项目填充了excel无法识别的DD.MM.YYYY格式的日期。我的目标是将它们改为excel可以使用的东西,这就是我的工作方式。

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 =接近结尾的行)。

2 个答案:

答案 0 :(得分:1)

您可以使用DMY列格式的“文本到列”功能。

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

答案 1 :(得分:0)

&#34;我尝试将整个范围与日期添加到数组中并查看&#34; ...

是的,这是要走的路。一次一张地读取和写入纸张上的单元格需要花费很多时间。

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