我有一个公式来根据另一个单元格(不在同一列)中的值有条件地格式化列中的文本:
=SUM(COUNTIF(A1,"*" & $B$1:$E$1 & "*")) = 1
可以找到更详细的说明here。
我尝试在Excel 2010中使用“录制宏”录制的宏的帮助下尝试应用此公式时遇到了问题。
以下是我的流程:
1)首先,我选择整个列(通过单击顶部的列字母)。
2)然后我转到“条件格式>新规则>使用公式确定要格式化的单元格”,输入我的公式并为我的格式选择填充颜色。
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
所以问题就出现了:在录制宏时,我得到了所需的格式,即A列中的所有单元格都是彩色编码的,具体取决于单元格B1,C1,D1和E1中有多少值匹配它的内容。
但是,当我尝试在未格式化的列上运行以前录制的宏时,它不能按预期工作,只能更改某些单元格的颜色,只能用一种颜色。
所以问题是:如何在Excel 2010中借助宏将多个条件格式应用于同一列?
以下是您的参考资料的完整宏代码:
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
答案 0 :(得分:2)
将公式从=SUM(COUNTIF(A1,"*" & $B$1:$E$1 & "*")) = 1
(与数组条目一起使用)更改为=SUMPRODUCT(COUNTIF(A1,"*" & $B$1:$E$1 & "*")) = 1
(不使用数组条目)可以解决问题。实际上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"每个规则的按钮,使其工作。最湖的问题是,thouse公式是数组公式。