在 VBA 中,Excel 允许使用 CustomOrder 参数对值进行排序,以选择排序的序列项。不幸的是,项目序列是用逗号分隔的,并且我的排序项目之一包含逗号。例如,我想按第二列中的类别对第一列中的数据进行排序。 “空中、陆地或海上”类别包含逗号。
Data1 Aerospace
Data2 Cyberspace
Data3 Cyberspace
Data4 Air, Land, or Sea
Data5 Aerospace
Data6 Air, Land, or Sea
Data7 Cyberspace
如果您录制 VBA 宏,则创建的代码如下所示:
MyWorksheet.Sort.SortFields.Add Key:=Range( _
"B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:= "Cyberspace,Air,Land,or Sea,Aerospace", _
DataOption:=xlSortNormal
MyWorksheet.Sort.Apply
因此,自定义排序顺序应该是“网络空间”,然后是“空中、陆地或海上”,然后是“航空航天”。然而,由于逗号的原因,第二个类别被视为三个类别。包含“Air、Land 或 Sea”的行会排序到底部,因为 Excel 找不到它们的自定义排序匹配项。
有没有办法让 CustomOrder 处理包含嵌入逗号的类别?
我尝试在类别周围加上双引号,并尝试用分号替换分隔符逗号(希望 Excel 能够接受分号而不是逗号)。两者都不起作用。
似乎缺少了Apply
。你可以添加吗
MyWorksheet.Sort.Apply
您的自定义订单与我的示例中一样有效。
EDIT根据OP更新的问题进行更新
将宏编辑为以下内容 - 使用 OrderCustom 参数的数组。
Dim oWorksheet As Worksheet
Set oWorksheet = ActiveWorkbook.Worksheets("Sheet1")
Dim oRangeSort As Range
Dim oRangeKey As Range
' one range that includes all colums do sort
Set oRangeSort = oWorksheet.Range("A1:B9")
' start of column with keys to sort
Set oRangeKey = oWorksheet.Range("B1")
' custom sort order
Dim sCustomList(1 To 3) As String
sCustomList(1) = "Cyberspace"
sCustomList(2) = "Aerospace"
sCustomList(3) = "Air, Land, or Sea"
Application.AddCustomList ListArray:=sCustomList
' use this if you want a list on the spreadsheet to sort by
' Application.AddCustomList ListArray:=Range("D1:D3")
oWorksheet.Sort.SortFields.Clear
oRangeSort.Sort Key1:=oRangeKey, Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=Application.CustomListCount + 1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
' clean up
Application.DeleteCustomList Application.CustomListCount
Set oWorksheet = Nothing
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)