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 中以不同方式处理日期?有这方面的文件吗?