我有一个任务列表,其中在A列中为每个任务分配了优先级1-6,其中“已完成”为6。每个任务在B列中都有一个任务请求日期。
我有以下代码按优先级对列表进行排序,这将完成的任务放在底部。
Sub mcr_Sort_by_Status()
'
' Sort by stattus
'
'Turn off screen updating so macro working/flashing does not show
Application.ScreenUpdating = False
Range("A7:K5000").Select
ActiveWorkbook.Worksheets("Tasks").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tasks").Sort.SortFields.Add Key:=Range("A8:A5000"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Tasks").Sort
.SetRange Range("A7:K5000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B7").Select
End Sub
但是对于其他任务,我想按日期对它们进行排序,最上面是最新的,但无法考虑如何以编程方式进行操作。
答案 0 :(得分:2)
将优先级排序为主键一次,然后重新调整范围并在第二次排序操作中将日期排序为主键。
我假设您的日期在B列中。
Sub mcr_Sort_by_Status()
With workSheets("Sheet1")
with .Range(.cells(7, "A"), .cells(.rows.count, "A").end(xlup).offset(0, 10))
.Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlyes
with .resize(application.match(6, .columns(1), 0)-1, .columns.count)
.Cells.Sort Key1:=.Columns(2), Order1:=xldescending, _
Orientation:=xlTopToBottom, Header:=xlyes
end with
end with
End With
end sub