使用条件格式按类别交替设置数据格式
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。
- 添加计算列
- 添加一个名为 COL_STRIPE 的新列,在我的示例中这是 E 列。
- 将以下公式添加到该列:
=IF(C2<>C1,IFERROR(NOT(E1),FALSE),E1)
。
- 此列的值为 true 或 false。
- 如果类别与上一行相同,则COL_STRIPE值保持不变,否则取反。
- 在第一行的情况下,
IFERROR()
语句会将其设置为 false。
- 将此公式复制到列中。
- 应用条件格式
- 突出你的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。
我有一个传播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。
- 添加计算列
- 添加一个名为 COL_STRIPE 的新列,在我的示例中这是 E 列。
- 将以下公式添加到该列:
=IF(C2<>C1,IFERROR(NOT(E1),FALSE),E1)
。 - 此列的值为 true 或 false。
- 如果类别与上一行相同,则COL_STRIPE值保持不变,否则取反。
- 在第一行的情况下,
IFERROR()
语句会将其设置为 false。 - 将此公式复制到列中。
- 应用条件格式
- 突出你的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。