在macros的帮助下将多个条件格式应用于同一列

我有一个公式来有条件地格式化一列中的文本基于另一个单元格(不在同一列)的值:

=SUM(COUNTIF(A1,"*" & $B$1:$E$1 & "*")) = 1 

更详细的描述可以在这里find。

我尝试应用这个公式时,遇到了一个问题,我在Excel 2010中使用“录制macros”logging了一个macros。

这是我做的过程:

1)首先我select整个列(通过点击顶部的列字母)。

2)然后我去“条件格式>新规则>使用公式来确定哪些单元格式”,input我的公式,并为我的格式select填充颜色。

3)然后我重复第2步3其他条件格式与不同的公式以及不同的填充颜色:

 =SUM(COUNTIF(A1,"*" & $B$1:$E$1 & "*")) = 2 =SUM(COUNTIF(A1,"*" & $B$1:$E$1 & "*")) = 3 =SUM(COUNTIF(A1,"*" & $B$1:$E$1 & "*")) = 4 

所以这就是问题所在:在loggingmacros时,我会得到所需的格式,即A列中的所有单元格都是彩色编码的,取决于单元格B1,C1,D1和E1中有多less个值与其内容匹配。

但是,当我尝试在未格式化的列上运行以前录制的macros时,它不能按预期方式工作,只能更改某些单元格的颜色,而只能使用一种颜色。

所以问题是:如何在Excel 2010中使用macros的帮助将多个条件格式应用于同一列?

以下是您的参考的完整macros代码:

 Sub Macro6() ' ' Macro6 Macro ' ' Columns("A:A").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=SUM(COUNTIF(A1,""*"" & $B$1:$E$1 & ""*"")) = 1" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 49407 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=SUM(COUNTIF(A1,""*"" & $B$1:$E$1 & ""*"")) = 2" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 5296274 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=SUM(COUNTIF(A1,""*"" & $B$1:$E$1 & ""*"")) = 3" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 15773696 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=SUM(COUNTIF(A1,""*"" & $B$1:$E$1 & ""*"")) = 4" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False End Sub 

将公式从=SUM(COUNTIF(A1,"*" & $B$1:$E$1 & "*")) = 1 (用于数组input)更改为=SUMPRODUCT(COUNTIF(A1,"*" & $B$1:$E$1 & "*")) = 1 (没有数组input时使用)修复了这个问题。 其实thouse公式给你相同的结果。 所以,这个代码工作:

 With Columns("A:A").FormatConditions .Add Type:=xlExpression, Formula1:= _ "=SUMPRODUCT(COUNTIF(A1,""*"" & $B$1:$E$1 & ""*"")) = 1" With .Item(.Count).Interior .Color = 49407 End With .Add Type:=xlExpression, Formula1:= _ "=SUMPRODUCT(COUNTIF(A1,""*"" & $B$1:$E$1 & ""*"")) = 2" With .Item(.Count).Interior .Color = 5296274 End With .Add Type:=xlExpression, Formula1:= _ "=SUMPRODUCT(COUNTIF(A1,""*"" & $B$1:$E$1 & ""*"")) = 3" With .Item(.Count).Interior .Color = 15773696 End With .Add Type:=xlExpression, Formula1:= _ "=SUMPRODUCT(COUNTIF(A1,""*"" & $B$1:$E$1 & ""*"")) = 4" With .Item(.Count).Interior .Color = 255 End With End With 

不知道为什么,但是当使用你的代码时,我应该明确地在表格中添加FormatConditions,并按下每个规则的“Apply”button使其工作。 最可能的问题是thouse公式是数组formuas。