我有一个电子表格,其中列出了设施,房屋面积和一个人的姓氏。
大约有8个设施。我想按特定功能排序,然后放在电子表格的顶部。
例如,假设我有100行,其中每行表示某种设施。选择Queens Facility作为单元格排序标准,并且Queens Facility有10行。我想将所有Queens Facility行排序为前10行。
这是代码。将特定选择的设施放在首位的其他标准是什么?
Sub SSSsort()
Dim lngRows As Long
lngRows = Range("AD65536").End(xlUp).Row
With ActiveWorkbook.Worksheets("DumpTab").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A1:A" & lngRows), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("B1:B" & lngRows), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("E1:E" & lngRows), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
'
.SetRange Range("A1:AD" & lngRows)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
这是EXCEL中的示例表:
答案 0 :(得分:1)
您需要指定CustomOrder
方法的SortFields.Add
属性。
例如,如果您的设施是“夹克设施”,“皇后设施”,“国王设施”和“王牌设施”,并且该设施在D列中,那么您可以使用以下代码对该顺序进行排序:
.SortFields.Add Key:=Range("D1:D" & lngRows), SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:="Jacks Facility,Queens Facility,Kings Facility,Aces Facility", _
DataOption:=xlSortNormal
(Join
函数可让您轻松将数组折叠到文本列表中)
答案 1 :(得分:0)
我通过录制宏来解决这个问题:
'Filter Criteria based on Chosen Facility:
Sheets("DumpTab").Range("$A$1:$AX$8228").AutoFilter Field:=1, Criteria1:=Facility
'Sort based on housing unit:
Sheets("DumpTab").Range("$A$1:$AX$8228").AutoFilter Field:=2, Criteria1:=HousingUnit
您需要做的就是将这两行加在一起,然后根据2个条件进行排序。