突出显示单元格或行,如果该行中的某个单元格已被条件格式化

时间:2019-01-26 05:15:00

标签: excel vba conditional-formatting

我有一个大型的Excel文档,其中包含200列和数百行。我设置了一堆条件格式设置规则,如果文本不正确,它们将变成红色。 (我在另一张纸上执行VLOOKUP公式,因此每一行必须具有特定的文本,否则VLOOKUP会出错。)问题是,行和列太多,很难找到红色的单元格。我正在寻找一种方法来突出显示整个黄色的行,或者仅突出显示该行的第一个或第二个单元格为黄色(如果该行中有一个条件格式的红色单元格)。

我已经在Google上搜索了好几个小时,找到了一种方法来执行此操作,但所有内容都指向“不可能”,这让我很难相信。我能够编写一个VBA脚本,如果我用红色填充一个单元格,该脚本将起作用,但是当条件格式规则中该单元格为红色时,它将不起作用。 (注意,我只是在学习VBA)

Sub FindingColor()
    Dim r1 As Range, r2 As Range, r As Range
    Dim nFirstRow As Long, nLastRow As Long, ic As Long

    Set r1 = ActiveSheet.UsedRange
    nLastRow = r1.Rows.Count + r1.Row - 1
    nFirstRow = r1.Row

    For ic = nFirstRow To nLastRow
        Set r2 = Intersect(r1, Rows(ic))
        For Each r In r2
            If r.Interior.ColorIndex = 3 Then
                r2(2).Interior.ColorIndex = 27
                Exit For
            End If
        Next r
    Next ic

End Sub

1 个答案:

答案 0 :(得分:1)

您需要检查DisplayFormat属性以测试条件格式所做的更改。

Sub FindingColor()
    Dim r1 As Range, r2 As Range, r As Range
    Dim nFirstRow As Long, nLastRow As Long, ic As Long

    Set r1 = ActiveSheet.UsedRange
    nLastRow = r1.Rows.Count + r1.Row - 1
    nFirstRow = r1.Row

    For ic = nFirstRow To nLastRow
        Set r2 = Intersect(r1, Rows(ic))
        For Each r In r2
            If r.displayformat.Interior.ColorIndex = 3 Then
                r2(2).Interior.ColorIndex = 27
                Exit For
            End If
        Next r
    Next ic

End Sub

您还可以根据实际打开CFR的条件进行检查。