如何在VBA中排序超过3列?

时间:2016-10-23 05:27:35

标签: excel vba excel-vba

我想在VBA中排序超过3列。当我添加key4时,它显示"未找到命名参数。"我怎么处理这个?这是我的代码:

Private Sub SubLieutenant_Click()
Dim LastRow As Long


LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Range("F6:F" & LastRow).Formula = "=DateDif(C6, Today(),""y"")+DateDif(E6, Today(), ""d"")/30"

Range("A6").Sort key1:=Range("F6"), order1:=xlDescending, key2:=Range("E6"), order2:=xlAscending, key3:=Range("D6"), order3:=xlAscending, key4:=Range("C6"), order4:=xlAscending, Header:=xlYes

End Sub

2 个答案:

答案 0 :(得分:1)

使用下面提到的行进行排序。在不同的列上对数据进行两次排序。

Range("A6").Sort key1:=Range("C6"), order1:=xlAscending, Header:=xlYes

Range("A6").Sort key1:=Range("F6"), order1:=xlDescending, _
        key2:=Range("E6"), order2:=xlAscending, _
        key3:=Range("D6"), order3:=xlAscending, Header:=xlYes

答案 1 :(得分:0)

你的例子在排序一个单元格时没有多大意义吗?

但是对于一个真实的例子,你只需先选择实际范围 然后单独添加排序键而不是一行

With ActiveSheet
   .Sort.SortFields.Add Key:=Range("F2:F6"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
   .Sort.SortFields.Add Key:=Range("E2:E6"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   .Sort.SortFields.Add Key:=Range("D2:D6"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   .Sort.SortFields.Add Key:=Range("C2:C6"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With

With ActiveSheet.Sort
    .SetRange Range("A1:G6")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With