按日期对表条目进行排序(dd.mm.yyyy)

时间:2018-07-10 11:28:06

标签: excel vba excel-vba

我正在尝试按列中的日期对表格进行排序。 日期的格式为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

我可以提供某种排序方式来正确排序日期吗? 提前非常感谢!

2 个答案:

答案 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)

数据如下:

enter image description here

我们必须首先将日期转换为 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

导致:

enter image description here