【问题标题】:Conditionally formatting cells in VBAVBA中的条件格式单元格
【发布时间】:2020-03-16 07:33:52
【问题描述】:

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

示例:如果值大于“D14”+“E14”,我想将“G14”突出显示为红色。反之亦然。如果“E14”的值为空白,它仍然会变为红色,因为它的行为就像它是零一样。

这是我的代码:

'Format Measured
 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(xlCellValue, xlGreater, "=$D14+$E14+$H14")
Set cond2 = rg.FormatConditions.Add(xlCellValue, xlLess, "=$D14-$F14")

'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

【问题讨论】:

  • 嗯,这里可能有不同的路线。我正在考虑SpecialCells 的思路,或者修改您的公式以包含"<>"""
  • 那么条件格式是否应该检查D14E14 是否为空白,或者只是E14
  • 只有 E14。我拥有电子表格的方式是在 D14 中进行测量,在 E14 和 F14 中进行容差。有些测量没有公差。

标签: excel vba format conditional-statements


【解决方案1】:

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

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"))

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

【讨论】:

  • 我一定会试一试的。谢谢!
  • 我对 VBA 真的很陌生。你知道要使用的公式吗?
  • @brandoncampbell,查看该替代方案的其他答案 =)
  • 哦,谢谢!我刚刚看到答案弹出。我对这个网站也很陌生哈哈
【解决方案2】:

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

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

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

【讨论】:

  • 这适用于 G14。有没有办法进行整个选择或循环?
  • 我无法复制它 - 对我来说适用于整个范围。你是如何实现的?
  • 除非 OP 需要 xlUp(意思是 G15 可能是空的?),但对我来说它也有效 =)
  • 我将新代码复制并粘贴到我的原始代码中。它适用于前 2 个单元格,但不适用于条件为空白的其余单元格。其他电子表格格式正常。
  • 条件格式的应用范围是多少?您可以在 条件格式 > 管理规则下看到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多