使用条件格式来按类别交替数据的格式
我有一个像这样的一堆行的电子表格:
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
再次变黑。
这可能吗?
请selectColumnsA:D和HOME>样式 – 条件格式,新规则…, 使用公式来确定要格式化哪些单元格,并在此公式为真的情况下格式化值 :
=ISEVEN(SUMPRODUCT(1/COUNTIF($C$1:$C1,$C$1:$C1)))
格式化... ,select您select的格式(黑暗?),OK,OK。
对于“浅色”,我假设要么没有填充足够轻,否则,你应用标准填充来适应(CF,如果触发,将覆盖它)。
您将要设置两个条件格式规则基于计数唯一types的公式,如下所示。
=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函数来提供数组(或循环 )types的处理。 如果添加或删除行和/或列,跟踪它覆盖的范围就成了一个问题。
解决scheme是准备好一个子过程,可以根据Range.CurrentRegion属性快速创build或更新两个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
我已经为高光“条纹”设置了深红色和淡红色。使用macros录制器进行实验,同时填充具有不同颜色,阴影和图案的单元格,直到find所需内容并replace上述代码中的相应值。
我不相信这很容易用内置工具完成,但是您可以添加一个计算列,然后应用基于它的条件格式。
这个例子假设你的数据是按类别列sorting的。 如果不按类别列对表格进行sorting,则需要多一步,即创build一个查找表,在该表中计算TRUE / FALSE COL_STRIPE值,然后在COL_STRIPE列中对其执行VLOOKUP。
这是一个工作的例子
- 添加计算列
- 添加一个名为COL_STRIPE的新列,在我的例子中是E列。
- 将以下公式添加到列中:
=IF(C2<>C1,IFERROR(NOT(E1),FALSE),E1)
。 - 此列的值为true或false。
- 如果类别与前一行相同,则COL_STRIPE值保持不变,否则将取消。
- 在第一行的情况下,
IFERROR()
语句会将其设置为false。 - 将该公式向下复制到列中。
- 应用条件格式
- 突出显示您的表
- 转到主页function区>条件格式>突出显示单元格规则>更多规则
- 使用公式来确定要格式化的单元格:
=NOT($E2)
,这将将格式应用于E列(COL_STRIPE)为FALSE
所有行 - 点击格式button设置你想要的背景颜色。