在VBA中有条件地格式化单元格

时间:2019-11-20 14:34:02

标签: excel vba format conditional-statements

我有条件地格式化一系列单元格。我想大于或小于另一个单元格的值。我在网上找到了此代码,可以这样做,但是我想知道如果条件单元格为空,是否可以跳过格式化。

示例:如果值大于“ D14” +“ E14”,我想突出显示“ G14”红色。反之亦然。如果“ E14”的值为空,则仍将其设为红色,因为它的作用好像是零。

这是我的代码:

surface.setSize()

2 个答案:

答案 0 :(得分:1)

提出使用公式的替代解决方案:

Sub Test()
    Dim rg As Range
    Dim cond1 As FormatCondition, cond2 As FormatCondition, cond3 As FormatCondition
    Set rg = Range("G14", Range("G14").End(xlDown))

    'clear any existing conditional formatting
    rg.FormatConditions.Delete

    'define the rule for each conditional format
    Set cond1 = rg.FormatConditions.Add(xlExpression, , "=AND($G14>$D14+$E14,$E14<>"""")")
    Set cond2 = rg.FormatConditions.Add(xlExpression, , "=AND($G14<$D14-$E14,$E14<>"""")")

    'define the format applied for each conditional format
    With cond1
        .Font.FontStyle = "Bold"
        .Font.Color = vbRed
    End With

    With cond2
        .Font.FontStyle = "Bold"
        .Font.Color = vbRed
    End With
End Sub

请注意,如果每个规则的格式都相同,则可以将两者合并为一个。

答案 1 :(得分:0)

您可以通过多种方式执行此操作,但是根据我的评论,例如:

Set rg = Range("D14", Range("G14").End(xlDown))
Set rg = Intersect(rg.Columns(1).SpecialCells(2).Rows.EntireRow, Range("G:G"))

我还考虑了您的范围对象,考虑引用一个Sheet对象。

顺便说一句,如果您还想避免E14为空,则可以扩展Intersect

Set rg = Intersect(rg.Columns(1).SpecialCells(2).Rows.EntireRow, rg.Columns(2).SpecialCells(2).Rows.EntireRow, Range("G:G"))

显然,另一个答案可能是如何使用公式作为条件来检查单元格是否为'<>“”`