按 1 列的值和另一列的颜色对动态范围的数据进行排序

Sorting a dynamic range of data by value of 1 column and color of another column

我正在研究 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

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

这一行还有你录制宏时的右括号。宏使用工作表 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