使用条件格式按类别

时间:2015-10-08 19:57:37

标签: excel excel-formula excel-2010 worksheet-function conditional-formatting

我有一个包含大量行的电子表格:

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      |    ...

我想格式化它,以便更容易区分不同类别的行。因此,我希望根据Category列中的值来替换着色而不是着色。换句话说,在上面的示例中,我希望cat1的行为暗,然后cat2为亮,然后cat3再次变暗,一直向下片。

这可能吗?

2 个答案:

答案 0 :(得分:3)

请选择ColumnsA:D和HOME>样式 - 条件格式,新规则...,使用公式确定要格式化的单元格格式化此公式的值:

=ISEVEN(SUMPRODUCT(1/COUNTIF($C$1:$C1,$C$1:$C1)))

格式化... ,选择你选择的格式(黑暗?),好的,好的。

对于' light'我假设没有填充是否足够轻,或者,如果没有,你应用标准填充以适应(CF,触发,将覆盖它)。

COUNTIF是一个顺序计数器,每个类别的1开始。将其划分为1并应用SUMPRODUCT按类别生成顺序计数器 (仅在类别时更改)。 ISEVEN适用于挑选其他类别。为了研究公式的详细工作原理,M $提供了评估公式。

答案 1 :(得分:2)

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

=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))

问题在于您不希望使用完整列引用来扩展它,因为它使用SUMPRODUCT function来提供数组(或循环)类型处理。如果添加或删除行和/或列,则跟踪它所覆盖的范围会成为问题。

解决方案是准备一个子程序,可以根据Range.CurrentRegion property快速为您创建或更新两个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

我设置了一个深红色和一个淡红色用于突出显示'条纹'用宏录制器进行实验,同时填充具有不同颜色,阴影和图案的单元格,直到找到所需的内容并替换上面代码中的相应值

Conditional Formatting striped banding