在顶部排序

时间:2018-11-16 15:50:45

标签: excel vba

我有一个电子表格,其中列出了设施,房屋面积和一个人的姓氏。

大约有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中的示例表:

Sample Data

2 个答案:

答案 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个条件进行排序。