Excel 使用条件格式按类别替换数据格式

Excel 使用条件格式按类别替换数据格式,excel,excel-formula,excel-2010,worksheet-function,conditional-formatting,Excel,Excel Formula,Excel 2010,Worksheet Function,Conditional Formatting,我有一个电子表格,上面有一大堆行,如下所示: Name | ID | Category | Attributes... -------------------------------------------------------- name0 | 753 | cat1 | ... name1 | 724 | cat1 | ... name2 | 149 | cat1 |

我有一个电子表格,上面有一大堆行,如下所示:

Name    |   ID    |   Category  |    Attributes...
--------------------------------------------------------
name0   |   753   |   cat1      |    ...
name1   |   724   |   cat1      |    ...
name2   |   149   |   cat1      |    ...
name3   |   265   |   cat1      |    ...
name4   |   032   |   cat2      |    ...
name5   |   991   |   cat2      |    ...
name6   |   238   |   cat2      |    ...
name7   |   005   |   cat3      |    ...
name8   |   632   |   cat3      |    ...
name9   |   393   |   cat3      |    ...
我想对它进行格式化,以便更容易区分不同类别的行。因此,我希望根据
类别
列中的值交替着色和不着色。换句话说,在上面的示例中,我希望
cat1
的行变暗,然后
cat2
变亮,然后
cat3
在整个工作表中再次变暗


这是可能的吗?

我认为使用内置工具不容易做到这一点,但是您可以添加一个计算列,然后在此基础上应用条件格式

本例假设您的数据按类别列排序。如果不按类别列对表进行排序,则还需要执行一个步骤,即创建一个查找表,在其中计算真/假列条带值,然后在列条带列中对其执行VLOOKUP

  • 添加计算列
    • 添加一个名为COL_STRIPE的新列,在我的示例中,这是列E
    • 向列中添加以下公式:
      =IF(C2C1,IFERROR(NOT(E1),FALSE),E1)
    • 此列的值为true或false
    • 如果类别与前一行相同,则COL_STRIPE值保持不变,否则将取反
    • 对于第一行,
      IFERROR()
      语句将其设置为false
    • 将此公式复制到下一列
  • 应用条件格式
    • 突出你的桌子
    • 转到主功能区>条件格式>高亮显示单元格规则>更多规则
    • 使用公式确定要格式化的单元格:
      =NOT($E2)
      ,这将把格式应用于E列(COL_STRIPE)为FALSE的所有行
    • 单击“格式”按钮设置所需的背景色

  • 您需要根据计数唯一类型的公式设置两个条件格式规则,如下所示

    =MOD(INT(SUMPRODUCT(1/COUNTIF($C$2:$C2, $C$2:$C2))), 2)
    =NOT(MOD(INT(SUMPRODUCT(1/COUNTIF($C$2:$C2, $C$2:$C2))), 2))
    
    问题是,您不想用完整列引用来扩展它,因为它使用提供数组(或循环)类型的处理。如果添加或删除行和/或列,跟踪它所覆盖的范围将成为一个问题

    解决方案是准备好一个子过程,该子过程可以基于以下内容为您快速创建或更新两个CF规则:。这是数据的“孤岛”,一直延伸到遇到完全空白的行或列

    Sub Set_CF_rules()
    
        With Worksheets("Sheet1")
            With .Cells(1, 1).CurrentRegion
                With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
                    .FormatConditions.Delete
    
                    .FormatConditions.Add Type:=xlExpression, Formula1:= _
                        "=MOD(INT(SUMPRODUCT(1/COUNTIF($C$2:$C2, $C$2:$C2))), 2)"
                    With .FormatConditions(.FormatConditions.Count).Interior
                        .PatternColorIndex = xlAutomatic
                        .ThemeColor = xlThemeColorAccent6
                        .TintAndShade = -0.249946592608417
                        .Parent.StopIfTrue = True
                    End With
    
                    .FormatConditions.Add Type:=xlExpression, Formula1:= _
                        "=NOT(MOD(INT(SUMPRODUCT(1/COUNTIF($C$2:$C2, $C$2:$C2))), 2))"
                    With .FormatConditions(.FormatConditions.Count).Interior
                        .PatternColorIndex = xlAutomatic
                        .ThemeColor = xlThemeColorAccent6
                        .TintAndShade = 0.799981688894314
                        .Parent.StopIfTrue = True
                    End With
    
                End With
            End With
        End With
    
    End Sub
    
    我已经设置了一个深红色和一个浅红色,用于使用宏记录器进行高光“条纹”实验,同时用不同的颜色、阴影和图案填充单元格,直到找到所需的内容并替换上述代码中的相应值


    请选择列a:D和主页>样式-条件格式,新规则…,使用公式确定要格式化的单元格,并格式化此公式为真的值:

    =ISEVEN(SUMPRODUCT(1/COUNTIF($C$1:$C1,$C$1:$C1)))
    
    格式化…,选择格式化选项(暗?),好,好

    对于“光”,我假设没有填充物足够轻,或者,如果没有,则应用标准填充物以适应(触发的CF将覆盖它)


    COUNTIF是一个顺序计数器,从每个类别的
    1
    开始。将其划分为
    1
    并应用SUMPRODUCT会按类别生成一个顺序计数器(仅当类别发生变化时才会发生变化)。ISEVEN用于选择备选类别。为了研究公式的详细工作原理,M$提供了评估公式

    它真的是cat1、cat2、cat3等吗?这将使一个简单的项目目标为偶数或奇数。不,这些只是填充。它实际上是不同的单词,所以我不能使用数字,不幸的是。这似乎只是突出显示每一行,而不是用新的类别进行更改。@pnuts,这很有效,但你能帮助理解这是做什么的吗?回答很好,但我接受了@pnuts给出的答案,因为它是最简单的,尽管我理解VBA,在这张纸上工作的其他一些人没有。