【问题标题】:Sorting a table using macro使用宏对表格进行排序
【发布时间】:2016-11-21 17:16:36
【问题描述】:

希望这里的这个新手可以在使用宏排序方面得到一些帮助。

我有一张 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

【问题讨论】:

    标签: excel vba sorting macros


    【解决方案1】:

    这是我在颜色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
    

    【讨论】:

    • 非常感谢您的回答!我的表实际上可以从 2 行到 2000 行不等,因此使用 Field:=52 指示器,它是否只是更改为 2000? “Table1”也是一个通用的,只会自动获取适用的数据吗?最后,我的排序数据一般都在查看数字,我将如何替换名字和姓氏部分?很抱歉成为这样的菜鸟。
    • 字段 52 是第 52 列。如果您的所有值都在一个真实的表中,那么 2000 行对于 excel 来说不算什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多