我有条件地格式化一系列单元格。我想大于或小于另一个单元格的值。我在网上找到了此代码,可以这样做,但是我想知道如果条件单元格为空,是否可以跳过格式化。
示例:如果值大于“ D14” +“ E14”,我想突出显示“ G14”红色。反之亦然。如果“ E14”的值为空,则仍将其设为红色,因为它的作用好像是零。
这是我的代码:
surface.setSize()
答案 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"))
显然,另一个答案可能是如何使用公式作为条件来检查单元格是否为'<>“”`