根据不同单元格的颜色更改单元格的颜色

时间:2018-03-21 18:33:46

标签: excel vba excel-vba

我在网上找到了Excel VBA代码,它突出显示了excel中连续的唯一值。我的表有大约一百行,代码检查每一行的唯一值。我为了我的目的稍微调整了代码,所以代码现在只是更改了唯一值的字体颜色。代码工作得很好,但我想在代码中添加一个额外的元素,我不知道该怎么做。

img

你可以在我桌子的这张部分照片中看到红色的唯一数字。但是,代码设置为仅搜索从照片中的第三列到最后一列的唯一值(包含所有1的列是其自己的列)。我想要添加到代码中的是,在一行中找到唯一值并且该值的字体颜色发生更改后,我希望该行第一列中的单元格突出显示为黄色。

例如,我知道第一行中有一个唯一值,因为该行中的最后一个值是红色。现在已找到第一行中的唯一值,我希望该行中的第一个单元格突出显示为黄色。但是,在我的表的第五行中,没有唯一值,因此该行中的任何值都不是红色,因此我不想要更改该行中第一个单元格的任何内容。

有没有人对如何更改我的代码以产生所需的结果有任何想法?

提前谢谢。

当前代码:

Option Explicit

Sub ColorUniquesInEachRow()

    Dim LastRow As Long
    Dim LastColumn As Long
    Dim RowIndex As Long

    LastRow = Cells(Rows.Count, 1).End(xlUp).Row

    For RowIndex = 6 To LastRow
        LastColumn = Cells(RowIndex, Columns.Count).End(xlToLeft).Column

        With Range(Cells(RowIndex, 4), Cells(RowIndex, LastColumn))
            .FormatConditions.AddUniqueValues
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
            .FormatConditions(1).DupeUnique = xlUnique
            With .FormatConditions(1).Font
                .ColorIndex = 3
                .Bold = True
            End With
            .FormatConditions(1).StopIfTrue = False
        End With

    Next

End Sub

1 个答案:

答案 0 :(得分:3)

我会避免使用条件格式,因为它可能会很快失控

此外,通过条件格式化格式化的单元格需要一种特殊的方式来获取

所以我建议您使用以下代码:

Option Explicit

Sub ColorUniquesInEachRow()
    Dim LastColumn As Long
    Dim RowIndex As Long
    Dim cell As Range
    Dim unique As Boolean

    For RowIndex = 6 To Cells(Rows.count, 1).End(xlUp).Row
        LastColumn = Cells(RowIndex, Columns.count).End(xlToLeft).Column

        unique = False

        With Range(Cells(RowIndex, 4), Cells(RowIndex, LastColumn))

            For Each cell In .SpecialCells(xlCellTypeConstants)
                If WorksheetFunction.CountIf(.Cells, cell.Value) = 1 Then
                    With cell.Font
                        .ColorIndex = 3
                        .Bold = True
                    End With
                    unique = True
                End If
            Next

            If unique Then Cells(RowIndex, 1).Interior.ColorIndex = 6

        End With
    Next
End Sub