使用条件格式按类别交替设置数据格式

Using conditional formatting to alternate the formatting of data by category

我有一个传播sheet,其中有一堆这样的行:

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 再次变暗sheet。

这可能吗?

我认为使用内置工具无法轻松完成此操作,但是您可以添加计算列,然后基于它应用条件格式。

此示例假定您的数据按类别列排序。如果您不按类别列对 table 进行排序,则还需要一个步骤,即创建一个查找 table,在其中计算 TRUE/FALSE COL_STRIPE 值,然后在您的 COL_STRIPE 列中,对其执行 VLOOKUP。

Here is a working example

  1. 添加计算列
    • 添加一个名为 COL_STRIPE 的新列,在我的示例中这是 E 列。
    • 将以下公式添加到该列:=IF(C2<>C1,IFERROR(NOT(E1),FALSE),E1)
    • 此列的值为 true 或 false。
    • 如果类别与上一行相同,则COL_STRIPE值保持不变,否则取反。
    • 在第一行的情况下,IFERROR() 语句会将其设置为 false。
    • 将此公式复制到列中。
  2. 应用条件格式
    • 突出你的table
    • 转到主页功能区 > 条件格式 > 突出显示单元格规则 > 更多规则
    • 使用公式确定要设置格式的单元格:=NOT($E2),这会将格式应用于 E 列 (COL_STRIPE) 为 FALSE[=39 的所有行=]
    • 单击格式按钮设置所需的背景颜色。

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

=MOD(INT(SUMPRODUCT(1/COUNTIF($C:$C2, $C:$C2))), 2)
=NOT(MOD(INT(SUMPRODUCT(1/COUNTIF($C:$C2, $C:$C2))), 2))

问题是您不想使用完整的列引用向下扩展它,因为它使用 SUMPRODUCT function 来提供数组(或 cyclic)类型处理。如果添加或删除行 and/or 列,跟踪它所涵盖的范围就会成为一个问题。

解决方案是准备一个子程序,可以根据Range.CurrentRegion property快速为您创建或更新两个CF规则。即 'island' 数据向外延伸,直到遇到完全空白的行或列。

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:$C2, $C:$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:$C2, $C:$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

我已经为高光设置了深红色和浅红色 'striping' 尝试使用宏记录器,同时用不同的颜色、阴影和图案填充单元格,直到找到您想要的东西并替换适当的值在上面的代码中。

请 select ColumnsA:D 和主页 > 样式 - 条件格式,新规则...,使用公式确定要格式化的单元格格式化满足此公式的值:

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

格式...,select 您选择的格式(深色?),好的,好的。

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

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