VBA中的条件格式,相同的颜色,多个字符串?

时间:2016-07-19 13:13:23

标签: excel-vba conditional-formatting vba excel

我有条件格式化的代码,我只改变字符串:

Cells.FormatConditions.Delete

With Range("$A$1:$H$17").FormatConditions.Add(Type:=xlTextString, String:="CPA", TextOperator:=xlContains)
    .Interior.Color = RGB(105, 191, 44)
End With
With Range("$A$1:$H$17").FormatConditions.Add(Type:=xlTextString, String:="CPN", TextOperator:=xlContains)
    .Interior.Color = RGB(105, 191, 44)
End With
With Range("$A$1:$H$17").FormatConditions.Add(Type:=xlTextString, String:="CSS", TextOperator:=xlContains)
    .Interior.Color = RGB(105, 191, 44)
End With
With Range("$A$1:$H$17").FormatConditions.Add(Type:=xlTextString, String:="RL", TextOperator:=xlContains)
    .Interior.Color = RGB(105, 191, 44)
End With

对于所有这些线路是否有其他选择,所以我可以用更短更有效的方式编写它?

此宏甚至会为包含“CPAzergfzergfer”的单元格着色。我怎么能写一个宏,我只对包含确切字符串的单元格进行着色?

2 个答案:

答案 0 :(得分:1)

您可以使用数组指定条件格式的条件,如下所示:

myArray = Array("CPA", "CPN", "CSS", "RL")
For myLoop = LBound(myArray) to UBound(myArray)
    With Range("$A$1:$H$17").FormatConditions.Add(Type:=xlTextString, String:=myArray(myLoop), TextOperator:=xlEqual)
        .Interior.Color = RGB(105, 191, 44)
    End With
Next

我还更改了TextOperator,因此它应该只选择与文本值匹配的项目,而不是选择包含文本值的项目。

答案 1 :(得分:0)

戴夫的回答很棒。这是另一种选择。这将所有条件放在一个公式中,我认为这使得在不太好的条件格式对话框中管理更容易。

我打开宏录制器并打开CF对话框并输入以下公式:

=OR(A1="CPA",A1="CPN",A1="CSS",A1="RL")

这是生成的代码的清理版本:

Sub Macro1()
ActiveSheet.Range("A1:H17").FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=OR(A1=""CPA"",A1=""CPN"",A1=""CSS"",A1=""RL"")"
Selection.FormatConditions(1).Interior.Color = RGB(105, 191, 44)
End Sub