VBA按日期排序

时间:2019-03-14 08:47:52

标签: excel vba sorting

我在第一行有一个包含日期的文件,并有一列标识符定义了一个表,在该表中我为相应的数据填写了员工数据(参见图片)enter image description here

我希望日期按时间顺序排序,但是我只想在填写表格之前对日期进行排序。

我尝试了以下代码

Sub sortByDates()

    Dim sumSheet as Worksheet
    Dim toSort as Range

    Set sumSheet = ThisWorkbook.ActiveSheet
    LastCol = sumsheet.Cells.Find(What:="*", After:=[a1], _
              SearchOrder:=xlByColumns, 
              SearchDirection:=xlPrevious).Column
    Set toSort = sumsheet.Rows(1).Resize(1, LastCol - 1).Offset(0, 1)

    toSort.Select
    ActiveWorkbook.Worksheets("Employees").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Employees").Sort.SortFields.Add Key:=toSort, SortOn:=xlSortOnValues, Order:=xlAscending, _
     DataOption:=xlSortNormal

    With ActiveWorkbook.Worksheets("Employees").Sort
        .SetRange toSort
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

但是日期移动了,但是却没有按照我的意愿排序。我认为这可能与Excel Sort不知道如何处理日期格式有关,但不确定。

1 个答案:

答案 0 :(得分:1)

您应该定义要排序的数据的格式。在代码toSort.Select的这一行之后,添加以下命令:

Selection.NumberFormat = "[$-409]d-mmm-yy;@"

(用适当的格式更改格式)

这是我使用和测试的代码:我对列进行了正确排序 (将feuil1更改为您的工作表名称)

Sub sortByDates()

Dim sumSheet As Range
Dim toSort As Range

'Set sumSheet =
LastCol = ThisWorkbook.ActiveSheet.Cells.Find(What:="*", After:=[a1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Set toSort = ThisWorkbook.ActiveSheet.Rows(1).Resize(1, LastCol - 1).Offset(0, 1)

toSort.Select
Selection.NumberFormat = "[$-409]d-mmm-yy;@"
ActiveWorkbook.Worksheets("feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("feuil1").Sort.SortFields.Add Key:=toSort, SortOn:=xlSortOnValues, Order:=xlAscending, _
 DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets("feuil1").Sort
    .SetRange toSort
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlLeftToRight
    .SortMethod = xlPinYin
    .Apply
End With

结束子