Excel VBA - 对两个未命名列进行排序的正确方法

问题描述 投票:0回答:2

我想对2列进行扩展排序(列永远不会改变)。代码应首先对列D进行排序,然后对列E进行排序。虽然我可以使用宏录制器来完成此操作,但它会生成大约20行代码,实际上,我知道它可以在大约5或6中完成。

下面的代码适用于一列,但我认为即使它可以清理一些。

Worksheets("CSAT Details").Sort.SortFields.Add Key:=Range("E1"), SortOn:=xlSortOnValues, Order:=xlAscending
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
With Worksheets("CSAT Details").Sort
    .SetRange Range("A2:F" & lastRow)
    .Orientation = xlTopToBottom
    .Apply
End With

我已经创建了下面的代码来尝试对2列进行排序,但它还没有工作,给出了一个

448命名参数未找到错误

lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Worksheets("CSAT Details").Sort.SortFields.Add _
    Key1:=Range("D1"), SortOn1:=xlSortOnValues, Order1:=xlAscending, _
    Key2:=Range("E1"), SortOn2:=xlSortOnValues, Order2:=xlAscending
With Worksheets("CSAT Details").Sort
    .SetRange Range("A2:F" & lastRow)
    .Orientation = xlTopToBottom
    .Apply
End With

我不确定我错过了什么。

excel vba excel-vba
2个回答
2
投票

类似下面的内容(只需在运行前指定您的范围):

Sub foo()
Range("A1:G6").Sort Key1:=Range("E1"), Order1:=xlAscending, Key2:=Range("D1") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom
End Sub

1
投票

这样的事情对你有用:

Sub tgr()

    Dim ws As Worksheet
    Dim LastRow As Long

    Set ws = ActiveWorkbook.Sheets("CSAT Details")
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    With ws.Range("D1:E" & LastRow)
        .Sort .Resize(, 1), xlAscending, .Offset(, 1).Resize(, 1), , xlAscending, Header:=xlYes
    End With

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.