【问题标题】:Using conditional formatting to alternate the formatting of data by category使用条件格式按类别交替数据格式
【发布时间】:2015-10-08 19:57:37
【问题描述】:

我有一个电子表格,里面有一堆这样的行:

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

这可能吗?

【问题讨论】:

  • 真的是 cat1, cat2, cat3, 等等吗?这样可以很容易地将项目定位为偶数或奇数。
  • 不,这些只是填充物。这实际上是不同的词,所以很遗憾,我不能使用数字。

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


【解决方案1】:

请选择 ColumnsA:D 和 HOME > 样式 - 条件格式,新规则...,使用公式来确定要格式化的单元格在此公式为真的情况下设置值:

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

Format...,选择您选择的格式(深色?),OK,OK。

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

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

【讨论】:

  • 这似乎只是突出显示每隔一行而不是更改新类别。
  • @pnuts,这行得通,但你能帮助理解它在做什么吗?
【解决方案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

我为突出显示“条纹”设置了深红色和淡红色.

        

【讨论】:

  • 很好的答案,但我接受了@pnuts 给出的答案,因为它是最简单的,虽然我了解 VBA,但处理此工作表的其他一些人不了解。
【解决方案3】:

我认为使用内置工具很难做到这一点,但是您可以添加一个计算列,然后根据它应用条件格式。

此示例假定您的数据按类别列排序。如果您不按类别列对表进行排序,则需要多一步,即创建一个查找表,在其中计算 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. 应用条件格式
    • 突出显示您的表格
    • 转到主页功能区 > 条件格式 > 突出显示单元格规则 > 更多规则
    • 使用公式确定要格式化的单元格:=NOT($E2),这会将格式应用于 E 列 (COL_STRIPE) 为 FALSE 的所有行
    • 单击格式按钮设置所需的背景颜色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 2023-04-10
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2017-06-01
    相关资源
    最近更新 更多