【问题标题】:Excel VBA Multi line sort by multiple criteria in Excel 2016Excel VBA 在 Excel 2016 中按多个条件进行多行排序
【发布时间】:2018-07-06 17:51:29
【问题描述】:

从这个帖子继续:Dynamic data valdiation drop downs with multiple critera ranking

我想根据多个条件对列表进行排序,然后对其进行排名,最后将其显示在下拉数据验证列表中(下拉列表包含在上面链接中引用的线程中)。

如何在 Excel 2016 中对多个标准的数据进行排序?我尝试使用高级过滤器和 worksheetChange 事件。我想在对数据进行排序之前对其进行操作,并且我想在对数据进行排序之前对其进行排序。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$D$2" Then
    Range("ÄB1[#All]").AdvancedFilter Action:=xlFilterInPlace, _
                       CriteriaRange:=Range("D1:D2"), Unique:=False
End If

End Sub

【问题讨论】:

    标签: excel vba sorting


    【解决方案1】:

    令人困惑的是,您正在选择一个包含在排序中的单元格。

    这将基于 A 列作为键(按 A 排序)过滤一系列数据 (A1:D15)。 如果愿意,可以按单个键排序范围。

    Sub sortbyColumnA()
    Dim ws As Worksheet
    Set ws = Sheets("Sheet1") 'Name your worksheet right here
    
        If ws.AutoFilterMode = False Then ws.Range("A1:D15").AutoFilter
        ws.AutoFilter.Sort.SortFields.Clear
        ws.AutoFilter.Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ws.AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        ws.Range("A1:D15").AutoFilter
    End Sub
    

    这是一个多键排序的示例,当然,您需要第一个排序中的倍数才能使第二个排序键生效,并且第二个排序中的倍数也需要相同才能使第三个排序键生效。您可以根据需要对任意数量的键进行排序,具体取决于数据集的大小。 它按排名第一 - 按名字第二 - 按点第三(升序也许你想在这里降序 - 提示提示)

    Sub sortbyMultiColumn()
    
        Dim ws As Worksheet
        Set ws = Sheets("Sheet1") 'Name your worksheet right here
    
            If ws.AutoFilterMode = False Then ws.Range("A1:D33").AutoFilter
            ws.AutoFilter.Sort.SortFields.Clear
            'First Sort
            ws.AutoFilter.Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            'Second Sort
            ws.AutoFilter.Sort.SortFields.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            'Third Sort
            ws.AutoFilter.Sort.SortFields.Add Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    
            With ws.AutoFilter.Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
    
            ws.Range("A1:D33").AutoFilter
    
        End Sub
    

    【讨论】:

    • 这太棒了!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2021-04-27
    • 2013-05-02
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多