【发布时间】:2021-07-22 16:45:00
【问题描述】:
我有一个按以下方式格式化的列:
Range("A:A").NumberFormat = "dd.mm.yyyy"
现在,我正在为此寻找一个高效的版本:
For k = 1 To Range("A1").End(xlDown).Row
' from first to last row
Cells(k, 1).Value = CDate(Cells(k, 1).Value)
Next k
这需要很长时间;(有人知道有效的解决方案吗?谢谢!!!
我为什么需要这个? 运行时:
With ws.Sort
.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1", Range("A1").End(xlDown))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
我得到了奇怪的排序:
01.01.2021
01.02.2021
01.03.2021
02.01.2021
【问题讨论】:
-
将数据加载到数组中,对其进行处理,然后将其写回范围。
-
或者使用 Data - Text to Columns 就可以了。
-
我真的不明白你的循环,你为什么不复制/粘贴然后格式化列?我在这里缺少什么?
-
我编辑了我的问题。我正在为排序目的进行所有这些 CDate 转换。我有德国日期,但不同的计算机默认日期。因此,我需要确保始终保留 dd.mm.yyyy 格式。 CDate 正在解决该问题以执行排序,无论是哪个系统。
-
如果您排序的列不包含日期,则字符串的排序会正确返回。您确定该列包含日期类型值吗?