我在第一行有一个包含日期的文件,并有一列标识符定义了一个表,在该表中我为相应的数据填写了员工数据(参见图片)
我希望日期按时间顺序排序,但是我只想在填写表格之前对日期进行排序。
我尝试了以下代码
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不知道如何处理日期格式有关,但不确定。
答案 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
结束子