Excel VBA - 多级排序

时间:2017-03-28 15:45:26

标签: excel excel-vba sorting vba

如何更改以下代码以多级方式排序?目前,代码一次对表进行一次排序,我想将它作为多级排序进行排序。

以下是我想要实现的目标:

enter image description here

这是我的代码,它一次对表格进行一次排序:

Range("A4:L" & lastRow).Sort key1:=Range("A4:A" & lastRow), _
    order1:=xlAscending, Header:=xlNo
Range("A4:L" & lastRow).Sort key1:=Range("B4:B" & lastRow), _
    order1:=xlAscending, Header:=xlNo
Range("A4:L" & lastRow).Sort key1:=Range("C4:C" & lastRow), _
    order1:=xlAscending, Header:=xlNo
Range("A4:L" & lastRow).Sort key1:=Range("D4:D" & lastRow), _
    order1:=xlAscending, Header:=xlNo
Range("A4:L" & lastRow).Sort key1:=Range("E4:E" & lastRow), _
    order1:=xlAscending, Header:=xlNo

如何更改上述内容以对所有内容进行排序?

2 个答案:

答案 0 :(得分:3)

我总是建议摆脱录制的.Sort方法,而不是'只需要你的'VBA排序代码。但是,存在一个问题,即每种类型最多只能排序三个排序键;解决方案是执行两个排序操作。先排序最高的序数,然后排序最后三个主要的排序序号。

With Worksheets("Sheet1").Range("A4:L" & lastRow)
    .Cells.Sort Key1:=.Columns("D"), Order1:=xlAscending, _
                Key2:=.Columns("E"), Order2:=xlAscending, _
                Orientation:=xlTopToBottom, Header:=xlYes
    .Cells.Sort Key1:=.Columns("A"), Order1:=xlAscending, _
                Key2:=.Columns("B"), Order2:=xlAscending, _
                Key3:=.Columns("C"), Order3:=xlAscending, _
                Orientation:=xlTopToBottom, Header:=xlYes
End With

你已经将单元格地址与hte图像中的表格列或标题标签混合在一起,所以我不确定我是否有正确的序数。以上将按A列排序为主要,B为次要,C为第三,D为第四,E为第五。

答案 1 :(得分:0)

s = ComboBox1.Text
sr = ComboBox1.Text & "4"

Dim xlSort As XlSortOrder
Dim LastRow As Long

With ActiveSheet
  LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
  Sheet9.Range("b4:k5002").Sort Key1:=Sheet9.Range(sr), Order1:=xlAscending, Key2:=Sheet9.Range("e4"), Order2:=xlAscending
End With