Excel Vba按MMM格式排序日期

时间:2014-01-03 15:07:48

标签: sorting date excel-vba vba excel

我有MMM-DD-YYYY格式的一些日期列,例如Jan-03-2014,但是当我使用它排序时:

ActiveSheet.Range("A3:Z" & rowNum).Sort Key1:=ActiveSheet.Columns("E") 

它不按实际日期排序。我意识到它将它视为字符串,并根据第一个字母对它们进行排序。无论如何都要按实际日期排序吗?

由于

2 个答案:

答案 0 :(得分:1)

你可以通过在Excel中录制宏来实现这一点,它给我这样的东西,并以“MMM-DD-YYYY”的格式对日期进行排序

 ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("A1:C1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
        "janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décemb         re" _
        , DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("A1:C1")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With

答案 1 :(得分:1)

基于John的建议,要以MMM格式对日期进行排序,我需要创建一个新列,使其成为日期并根据该列对其进行排序,我使用下面的代码:

For i = 3 To rowNum
    If ActiveSheet.Cells(i, 5).Value <> vbNullString Then
        ActiveSheet.Cells(i, 8).Value = CDate(ActiveSheet.Cells(i, 5).Value)
    End If
Next i
ActiveSheet.Range("A3:Z" & rowNum).sort Key1:=ActiveSheet.Columns("H"), Header:=xlNo
ActiveSheet.Columns("H").Delete

想到我应该分享它,非常感谢!