VBA中的自动多级排序

时间:2017-11-28 20:45:52

标签: excel vba sorting

我目前有以下代码可以使用,每次输入内容时,都会按列I自动排序

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    If Target.Column = 9 Then
        Dim lastRow As Long
        lastRow = ActiveSheet.Cells.Find(What:="*", LookIn:=xlValues, 
               SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
        Range("A2:I" & lastRow).Sort Key1:=Range("I2:I" & lastRow), 
              Order1:=xlAscending, Header:=xlNo

    End If
End Sub

我想要它,以便它主要按项目I排序,但也按列A排序。请帮助吗?

1 个答案:

答案 0 :(得分:2)

这样的任何请求的起点应该是"启动宏录制器,执行排序,并查看它吐出的代码"。

如果您启动录像机并添加如下多级别类别:

enter image description here

enter image description here

...然后宏记录器吐出这个:

Sub Macro11()
'
' Macro11 Macro
'

'
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("I2:I16") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A16") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:I16")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

这为您提供了添加多个排序键所需语法的线索。您是否需要帮助修改原始代码,或者这足以让您入门?