Excel VBA 在 Excel 2016 中按多个条件进行多行排序

Posted

技术标签:

【中文标题】Excel VBA 在 Excel 2016 中按多个条件进行多行排序【英文标题】:Excel VBA Multi line sort by multiple criteria in 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

【问题讨论】:

【参考方案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

【讨论】:

这太棒了!非常感谢!

以上是关于Excel VBA 在 Excel 2016 中按多个条件进行多行排序的主要内容,如果未能解决你的问题,请参考以下文章

Excel 2016 VBA - 从 Excel 2013 升级的问题

使用 VBA 插入图片,Excel 2010 和 Excel 2016 之间的大小不同

VBA excel英语2007导致excel 2016法语错误消息

VBA 在 Excel 2016 中以不同方式处理日期?有这方面的文件吗?

如何在 Excel 2016 中调试一个简单的 vba 函数?

VBA 编辑器损坏 - Excel 2016 OSX