Excel 使用条件格式按类别替换数据格式
我有一个电子表格,上面有一大堆行,如下所示:Excel 使用条件格式按类别替换数据格式,excel,excel-formula,excel-2010,worksheet-function,conditional-formatting,Excel,Excel Formula,Excel 2010,Worksheet Function,Conditional Formatting,我有一个电子表格,上面有一大堆行,如下所示: Name | ID | Category | Attributes... -------------------------------------------------------- name0 | 753 | cat1 | ... name1 | 724 | cat1 | ... name2 | 149 | cat1 |
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 | ...
我想对它进行格式化,以便更容易区分不同类别的行。因此,我希望根据类别
列中的值交替着色和不着色。换句话说,在上面的示例中,我希望cat1
的行变暗,然后cat2
变亮,然后cat3
在整个工作表中再次变暗
这是可能的吗?我认为使用内置工具不容易做到这一点,但是您可以添加一个计算列,然后在此基础上应用条件格式 本例假设您的数据按类别列排序。如果不按类别列对表进行排序,则还需要执行一个步骤,即创建一个查找表,在其中计算真/假列条带值,然后在列条带列中对其执行VLOOKUP
- 添加一个名为COL_STRIPE的新列,在我的示例中,这是列E
- 向列中添加以下公式:
李>=IF(C2C1,IFERROR(NOT(E1),FALSE),E1)
- 此列的值为true或false
- 如果类别与前一行相同,则COL_STRIPE值保持不变,否则将取反李>
- 对于第一行,
语句将其设置为falseIFERROR()
- 将此公式复制到下一列
- 突出你的桌子
- 转到主功能区>条件格式>高亮显示单元格规则>更多规则
- 使用公式确定要格式化的单元格:
,这将把格式应用于E列(COL_STRIPE)为FALSE的所有行=NOT($E2)
- 单击“格式”按钮设置所需的背景色
您需要根据计数唯一类型的公式设置两个条件格式规则,如下所示
=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))
问题是,您不想用完整列引用来扩展它,因为它使用提供数组(或循环)类型的处理。如果添加或删除行和/或列,跟踪它所覆盖的范围将成为一个问题
解决方案是准备好一个子过程,该子过程可以基于以下内容为您快速创建或更新两个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
我已经设置了一个深红色和一个浅红色,用于使用宏记录器进行高光“条纹”实验,同时用不同的颜色、阴影和图案填充单元格,直到找到所需的内容并替换上述代码中的相应值
请选择列a:D和主页>样式-条件格式,新规则…,使用公式确定要格式化的单元格,并格式化此公式为真的值::
=ISEVEN(SUMPRODUCT(1/COUNTIF($C$1:$C1,$C$1:$C1)))
格式化…,选择格式化选项(暗?),好,好
对于“光”,我假设没有填充物足够轻,或者,如果没有,则应用标准填充物以适应(触发的CF将覆盖它)
COUNTIF是一个顺序计数器,从每个类别的
1
开始。将其划分为1
并应用SUMPRODUCT会按类别生成一个顺序计数器(仅当类别发生变化时才会发生变化)。ISEVEN用于选择备选类别。为了研究公式的详细工作原理,M$提供了评估公式 它真的是cat1、cat2、cat3等吗?这将使一个简单的项目目标为偶数或奇数。不,这些只是填充。它实际上是不同的单词,所以我不能使用数字,不幸的是。这似乎只是突出显示每一行,而不是用新的类别进行更改。@pnuts,这很有效,但你能帮助理解这是做什么的吗?回答很好,但我接受了@pnuts给出的答案,因为它是最简单的,尽管我理解VBA,在这张纸上工作的其他一些人没有。