我正在尝试按列中的日期对表格进行排序。
日期的格式为dd.mm.yyyy
。
我正在使用以下代码对rng
范围对象内的数据进行排序:
rng.Sort key1:=.Cells(HeaderRow, SortColumn), _
order1:=xlAscending, Header:=xlYes, DataOption1:=xlSortTextAsNumbers
但是,由于日期格式的原因,排序会导致按字母顺序正确排序,而不是按日期排序,因为字符串是从第一个字符到最后一个字符排序的。例如,输出为:
10.07.2018
10.08.2017
11.06.2018
我可以提供某种排序方式来正确排序日期吗? 提前非常感谢!
答案 0 :(得分:2)
如果这些是实际日期,则可以正确排序;它们必须是看起来像日期的文本。将看起来像文本的日期转换为实际日期,对其进行排序并应用所需的数字格式。
With rng
.TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, xlDMYFormat)
.Sort Key1:=.Cells(1), Order1:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlYes
.NumberFormat = "dd.mm.yyyy"
End With
答案 1 :(得分:2)
数据如下:
我们必须首先将日期转换为 true 日期,然后进行排序:
Sub DateFixer()
Dim i As Long, N As Long, d As Date
N = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To N
With Cells(i, "A")
v = .Text
.Clear
.NumberFormat = "dd.mm.yyyy"
arr = Split(v, ".")
.Value = DateSerial(arr(2), arr(1), arr(0))
End With
Next i
Range("A1:A" & N).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
导致: