【问题标题】:Sorting a dynamic range of data by value of 1 column and color of another column按一列的值和另一列的颜色对数据的动态范围进行排序
【发布时间】:2017-02-20 19:26:49
【问题描述】:

我正在开发一个 vba,以按第 2 列的单元格颜色和第 1 列的值对数据的动态范围进行排序。该代码可以仅按值排序,但是当我添加要排序的代码时出现语法错误细胞颜色也是如此。我在互联网上搜索了几个小时类似的情况,但失败了。 (也许我不知道正确的关键字)

以下是我正在处理的代码。请给我一些启发,谢谢!

Dim oneRange As Range
Dim aCell As Range
Dim bCell As Range

Set oneRange = Selection
Set aCell = ActiveCell
Set bCell = ActiveCell.Offset(0, 1)

oneRange.Sort key1:=aCell, Order1:=xlAscending, Header:=xlYes

oneRange.Sort Key2:=bCell, _
   SortOn:=xlSortOnCellColor, _
   Order:=xlAscending, _
    DataOption:=xlSortNormal).SortOnValue.Color = _
    RGB(198, 239, 206)

  End Sub

【问题讨论】:

    标签: excel vba columnsorting


    【解决方案1】:

    您正在尝试混合使用范围排序和工作表排序。

    这一行仍然有您录制宏时的右括号。该宏使用 Worksheet SortFields.Add 方法。

    DataOption:=xlSortNormal).SortOnValue.Color = _

    没有办法根据您的问题编写准确的宏。尽量避免使用 Selection、Activate、ActiveCell 等。

    这应该让你开始:

    Sub SortData()
        Dim aColumn As Range, bColumn As Range, Target As Range
    
        With ActiveWorkbook.Worksheets("Sheet1")
            Set Target = .Range("A1").CurrentRegion
            Set aColumn = .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
            Set bColumn = .Range("B2", .Range("B" & .Rows.Count).End(xlUp))
    
            With .Sort
                .SortFields.Clear
                .SortFields.Add(bColumn, xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(198, 239, 206)
                .SortFields.Add Key:=aColumn, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .SetRange Selection
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
    End Sub
    

    【讨论】:

    • 感谢您的回答!情况是我需要处理 5 列数据,我需要先按 B 列中的颜色和 A 列中的值对它们进行排序。
    • 我按错了 ENTER 键。当我尝试运行 VBA 时,它提示“运行时错误'1004':对象'_Global'的方法'范围'失败”并指向“.Set aColumn = Range("A2", .Range("A " & .Rows.Count).End(xlUp))" 这行对我来说很有意义,所以我真的不知道如何调试它,请指教,提前谢谢!
    • 我错过了一个点限定符。 A列中没有数据也会导致错误。您要过滤的实际数据范围是多少?
    • 非常感谢!添加点限定符后,我让它完美地工作。
    • @YSCheung 我很高兴能提供帮助。 :)
    猜你喜欢
    • 2019-04-02
    • 2010-12-01
    • 2016-03-24
    • 1970-01-01
    • 2020-03-21
    • 2023-04-04
    • 1970-01-01
    • 2022-09-28
    • 2012-10-09
    相关资源
    最近更新 更多