借助宏将多个条件格式应用于同一列

时间:2014-03-07 23:08:49

标签: excel excel-vba excel-formula conditional-formatting vba

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

=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

1 个答案:

答案 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公式是数组公式。