如何使用FormatConditions根据单元格值与其他单元格的比较来更改单元格颜色?

时间:2012-04-26 05:13:30

标签: excel excel-vba vba

如果单元格值大于其他列中的另一个单元格,则需要更改单元格颜色。例如,G6中的值> D6,这条规则需要适用于整个专栏。

我用formatConditions实现了一些代码,但结果不太正确。

 Set rngCell = Cells(6, 7)

 Set objCF = rngCell.FormatConditions.Add _
            (Type:=xlCellValue, Operator:=xlGreater, Formula1:=rngCell.offset(, -3))
'set formats for new CF
With objCF
    .Font.ColorIndex = 26
    .Interior.ColorIndex = 19
End With 

使用此代码,我得到的结果规则是:Cell Value> 18(18是D6的细胞值)

但我想要的是规则:细胞价值> $ D6

任何人都可以提供帮助吗?

3 个答案:

答案 0 :(得分:1)

这是我使用的方法(您可以使用Macro Recorder轻松创建和修改一个)。格式化将应用于第七列(“G”)。该公式是不言自明的。请注意,由于公式是一个字符串,您可以动态地连接列/行。

Dim r As Range

Set r = Sheet1.Columns(7)
r.FormatConditions.Add Type:=xlExpression, Formula1:="=$G1>$D1"
r.FormatConditions(r.FormatConditions.Count).SetFirstPriority
With r.FormatConditions(1)
    .Interior.PatternColorIndex = xlAutomatic
    .Interior.ColorIndex = 19
    .Font.ColorIndex = 26
End With
r.FormatConditions(1).StopIfTrue = False

set r = nothing

答案 1 :(得分:0)

如果你正在做那个单元格,那么试试这个

Set rngCell = Cells(6, 7)

Set objCF = rngCell.FormatConditions.Add(Type:=xlExpression, _
                                         Operator:=xlGreater, _
                                         Formula1:="=" & rngCell.Address & ">" & rngCell.Offset(, -3).Address)
'set formats for new CF
With objCF
    .Font.ColorIndex = 26
    .Interior.ColorIndex = 19
End With

如果您正在为整个列执行此操作,请尝试此

Set rngCell = Cells(1, 7)

Set objCF = Columns("G:G").FormatConditions.Add(Type:=xlExpression, _
                                         Operator:=xlGreater, _
                                         Formula1:="=" & Replace(rngCell.Address, "$", "") & _
                                         ">" & Replace(rngCell.Offset(, -3).Address, "$", ""))
'set formats for new CF
With objCF
    .Font.ColorIndex = 26
    .Interior.ColorIndex = 19
End With

答案 2 :(得分:0)

感谢大家的投入,也许我没有正确描述我的问题。我想要的只是改变G列中一个单元格的颜色,例如值$ G $ 9> $ D $ 9,然后我只需要改变单元格G9的格式,整个列的规则相同(排除四个行的行)。

现在我已经找到了一个解决方案,目前它工作正常。

Dim r As Range
Set r = Cells(5, 7)
r.FormatConditions.Delete
r.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="=$D5"
r.FormatConditions(r.FormatConditions.Count).SetFirstPriority
With r.FormatConditions(1)
    .Interior.PatternColorIndex = xlAutomatic
    .Interior.ColorIndex = 19
    .Font.ColorIndex = 26
End With
r.FormatConditions(1).StopIfTrue = False

r.Copy
Range("G5:G" & lastRowNum).PasteSpecial xlPasteFormats