根据其中一个单元格的内容为整行着色

时间:2012-11-05 21:45:27

标签: excel vba formatting

我尝试根据其中一个列中的结果为电子表格着色。我使用以下代码:

With newSheet.Range("B:B")
    .FormatConditions.Add(Excel.XlFormatConditionType.xlCellValue, Excel.XlFormatConditionOperator.xlEqual, "CORRECT")
    .FormatConditions(1).Interior.ColorIndex = 4

    .FormatConditions.Add(Excel.XlFormatConditionType.xlCellValue, Excel.XlFormatConditionOperator.xlEqual, "INCORRECT")
    .FormatConditions(2).Interior.ColorIndex = 3
End With

不幸的是,这只会使包含" CORRECT"或" INCORRECT"。我希望它扩展到它们所在的行(例如,如果B12包含" CORRECT",我希望A12:G12全部为绿色)。有人建议我尝试使用表达式,所以我尝试了以下代码:

.FormatConditions.Add(Type:=XlFormatConditionType.xlExpression, Formula1:="=B" & row & "= ""CORRECT"")")
.FormatConditions(1).Interior.ColorIndex = 4

然而,这会返回E_INVALIDARG异常。我很感激有关如何解决此问题的任何提示。我还应该注意,循环遍历每一行并一次检查一行并不是一种选择,因为有数千行。

3 个答案:

答案 0 :(得分:4)

一旦删除多余的右括号并使列成为绝对值

,您的公式应该有效
.FormatConditions.Add(Type:=XlFormatConditionType.xlExpression, Formula1:="=$B1= ""CORRECT""")
.FormatConditions(1).Interior.ColorIndex = 4

确保将公式$B1中的行设置为格式化范围的第一行(不需要循环)

答案 1 :(得分:0)

您可以将其粘贴到相关的工作表中:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    i = 1
    While Range("B" & i).Value2 <> ""
        If Range("B" & i).Value2 = "INCORRECT" Then
            Range("A" & i & ":G" & i).Interior.ColorIndex = 3
        ElseIf Range("B" & i).Value2 = "CORRECT" Then
            Range("A" & i & ":G" & i).Interior.ColorIndex = 4
        Else
            Range("A" & i & ":G" & i).Interior.ColorIndex = 0
        End If
        i = i + 1
    Wend
End Sub

这假设您的数据从第1行开始(否则更改i的起始值)。

答案 2 :(得分:0)

这是一个非常非常低技术的答案。但是,在您需要使用颜色突出显示单元格后(使用代码),复制列中的所有值,并对行本身的“格式”执行粘贴特殊操作。

问题在于它是静态的,如果你的值随输入而变化,那么行上的颜色就会消失。

但如果它是一次性的话,那可能会奏效。

如果这样做,请确保您评估的列具有与您要粘贴的行中的数据兼容的单元格格式(即:“常规”,“文本”等)。

Kludgey,但如果你绝对需要这么快,你只需要做一次,它可能会有效。

编辑:非常肯定凯文在下面的答案是一个更好的答案,因为它实际上用代码解决了它,并且看起来即使值在评估的单元格中发生变化也会起作用。