我有一组数据(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 =接近结尾的行)。
答案 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