子排序宏

时间:2018-09-21 10:09:40

标签: excel vba

我有一个任务列表,其中在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

但是对于其他任务,我想按日期对它们进行排序,最上面是最新的,但无法考虑如何以编程方式进行操作。

1 个答案:

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