如何通过重复组突出显示不同颜色的行?

时间:2017-05-25 18:18:14

标签: excel excel-vba conditional-formatting vba

如何按重复项组突出显示不同颜色的行?

我不关心本身使用哪种颜色,我只想要重复的行一种颜色,下一组重复另一种颜色。

enter image description here

例如,如果我想要'1s'绿色,'2s'蓝色等等。在我的专栏中它达到120。

谢谢。

3 个答案:

答案 0 :(得分:2)

尝试这个简单的代码并根据您的需要进行修改。它非常自我解释,

Sub dupColors()
Dim i As Long, cIndex As Long
cIndex = 3
Cells(1, 1).Interior.ColorIndex = cIndex
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(i, 1) = Cells(i + 1, 1) Then
        Cells(i + 1, 1).Interior.ColorIndex = cIndex
    Else
        If Cells(i + 1, 1) <> "" Then
            cIndex = cIndex + 1
            Cells(i + 1, 1).Interior.ColorIndex = cIndex
        End If
    End If
Next i
End Sub

enter image description here

答案 1 :(得分:2)

Gowtham的解决方案仅特定于数字,并使用VBA。我有一个简单的解决方法,可以处理任何类型的数据,不需要VBA。

我们可以使用另一列,该列使用公式为所有重复项生成唯一值,并对该列使用Conditional Formatting> Color Scales。下面的屏幕截图。

Color Scales

您可以使用的公式是

"=ROW(INDEX(A$2:A$12,MATCH(A2,A$2:A$12,0)))"

在上面的公式中,A $ 2:A $ 12是我们要搜索重复项的范围。

该公式基本上在给定范围内搜索重复值的第一个实例,然后输入该第一个实例的行号。

PS:在上式中,范围“ A $ 2:A $ 12”是固定范围,在表中使用上述公式要简单得多,因为表范围是动态的

使用表格的另一个好处是,我们甚至可以对数据进行排序,以将重复值分组在一起

=ROW(INDEX([Column1],MATCH(A2,[Column1],0)))

答案 2 :(得分:0)

Gowtham的答案很好,没有它们,我将无法弄清楚以下内容!我对唯一的颜色分配也有同样的需求,但是,我需要比colorindex提供的56种颜色更多的变化,因此我通过使用RandBetween和RGB通过随机的红色来创建随机的颜色,对Gowtham的代码进行了一些修改,以提供更多的可变性,蓝色和绿色值。

我将颜色范围保持在120到255之间,因为某些较低的值可能会导致单元格太暗而无法读取,但是您当然可以根据自己的喜好进行自定义。当然,可以改进下面的代码,因为我不是专家,但是它能够获得所需的100多种颜色。

编辑:我将添加RGB值可能重叠的可能性。我只需要对视觉辅助进行颜色编码即可。但是如果您需要严格的唯一颜色值,则此代码将无法保证。

Dim rCount, RandCol1, RandCol2, RandCol3, i As Long

rCount = Sheet1.Range("A" & Rows.Count).End(xlUp).Row

    For i = 1 To rCount
        If Sheet1.Cells(i, 1) = Sheet1.Cells(i + 1, 1) Then
            Sheet1.Cells(i + 1, 1).Interior.Color = RGB(RandCol1, RandCol2, RandCol3)
        Else
            If Sheet1.Cells(i + 1, 1) <> "" Then
                RandCol1 = WorksheetFunction.RandBetween(120, 255)
                RandCol2 = WorksheetFunction.RandBetween(120, 255)
                RandCol3 = WorksheetFunction.RandBetween(120, 255)
                Sheet1.Cells(i + 1, 1).Interior.Color = RGB(RandCol1, RandCol2, RandCol3)
            End If
        End If
    Next i