如何使用UsedRange使用多个条件进行排序?

时间:2018-08-29 21:16:53

标签: excel-vba

我正在竭尽全力试图弄清这个问题。我要完成的工作是根据该行中单元格的标准对电子表格中的许多行进行排序。

例如,在200行中,我想按S&P列对其中的50行进行排序。然后,对于其他20行,我想按N列对它们进行排序。行数取决于使用行计数。我验证了行计数是否与MsgBox lastRow命令一起使用。

我所有其他代码都可以正常工作-我排序,删除UsedRange.Rows等(VMC:)。

在SortThree中:是失败。

我关闭过滤器模式,它使用我的条件对工作表进行排序,lastRow是正确的数字,然后当我尝试应用实际的过滤器以按S列(19)然后按P列(16)对其进行排序时,它什么都不做。

有帮助吗? :)

VMC:
        If Sheets(2).FilterMode Then Sheets(2).AutoFilterMode = False
        .AutoFilter field:=16, Criteria1:="0-VMC"
        If ActiveSheet.UsedRange.Row.Count = 0 Then GoTo SortThree
        .Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete

SortThree:
If Sheets(2).FilterMode Then Sheets(2).AutoFilterMode = False
        .AutoFilter field:=16, Criteria1:="3*"
        lastRow = Cells(Rows.Count, 1).End(xlUp).Row
        MsgBox lastRow
        .Range("A2:AA" & lastRow).Sort Key1:=.Cells(2, 19), Order:=xlAscending, SortOn:=xlSortOnValues, _
                  Key2:=.Cells(2, 16), Order:=xlAscending, SortOn:=xlSortOnValues, _
                  Orientation:=xlTopToBottom, Header:=xlNo
                  .Apply
.AutoFilterMode = False

1 个答案:

答案 0 :(得分:0)

VBA Range.Sort的order参数为Order1,Order2和(如有必要)Order3。这些与Key1,Key2和Key3一致。您不需要.Apply。 SortOn:= xlSortOnValues不是有效的参数;它属于Sort.SortFields.Add,这是Sort的另一种类型。您不能将两种Sort方法混合搭配。

datetime