使用宏对表进行排序

时间:2016-07-19 00:35:42

标签: excel vba sorting macros

希望这位新手可以获得一些使用宏进行排序的帮助。

我有一张D:R表的分类。

首先,整个表格需要按照Q列的升序排序。

然后,同一个表按照P列按升序排序。

最后,整个表需要将每列D的黄色突出显示的行带到顶部。

我当前的公式是使用内置刻录机录制的,但它无法正常工作。

有人会提供任何建议吗?非常感谢提前!

'Sorting for easier read
    'Check for filter, turn on if none exists
    If Not ActiveSheet.AutoFilterMode Then
        ActiveSheet.Range("D1:R1").AutoFilter
    End If
    'Sort in order of column Q
    ActiveWorkbook.Worksheets(4).AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(4).AutoFilter.Sort.SortFields.Add Key:=Range( _
        "Q1:Q10000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets(4).AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
    End With
    'Sort in order of column P
    ActiveWorkbook.Worksheets(4).AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(4).AutoFilter.Sort.SortFields.Add Key:=Range( _
        "P1:P10000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets(4).AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
    End With
    'Bring highlighted row to the top
    ActiveWorkbook.Worksheets(4).AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(4).AutoFilter.Sort.SortFields.Add(Range("D:D" _
        ), xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(255 _
        , 255, 0)
    With ActiveWorkbook.Worksheets(4).AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
    End With

1 个答案:

答案 0 :(得分:0)

这是我用颜色yellow对第52列进行排序的方法:

Sub SortOnDuplicates()

ws.ListObjects("Table1").Range.AutoFilter _
    Field:=52, _
    Criteria1:=RGB(255, 255, 0), _
    Operator:=xlFilterCellColor

End Sub

这是一个按升序排序的方法:

ws.ListObjects("Table1").Range.AutoFilter Field:=52
With ws.ListObjects("Table1").Sort
    'Last Name
    .SortFields.Clear
    .SortFields.Add _
        Key:=Range("Table1[[#All],[Last Name]]"), _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    'First Name
    .SortFields.Clear
    .SortFields.Add _
        Key:=Range("Table1[[#All],[First Name]]"), _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With