Можно ли покрасить каждую группу повторяющихся значений в уникальный цвет? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть лист Excel, имеющий в столбце C большое количество записей, в которых есть некоторые, которые являются дублирующими значениями.У меня есть этот фрагмент кода, который в основном проходит через весь столбец C, проверяет каждую группу повторяющихся значений и окрашивает их определенным цветом.

Sub ColorCompanyDuplicates()

Worksheets("Master Filtered").Activate

    Dim xRg As Range
    Dim xTxt As String
    Dim xCell As Range
    Dim xChar As String
    Dim xCellPre As Range
    Dim xCIndex As Long
    Dim xCol As Collection
    Dim I As Long

    Dim lastrow As Long
lastrow = Cells(Rows.Count, 1).End(xlUp).Row


    On Error Resume Next
    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If
    Set xRg = ThisWorkbook.Worksheets("Master Filtered").Range("C4:C" & lastrow)

    If xRg Is Nothing Then Exit Sub
    xCIndex = 2
    Set xCol = New Collection
    For Each xCell In xRg
      On Error Resume Next
      xCol.Add xCell, xCell.Text
      If Err.Number = 457 Then
        xCIndex = xCIndex + 1
        Set xCellPre = xCol(xCell.Text)
        If xCellPre.Interior.ColorIndex = xlNone Then xCellPre.Interior.ColorIndex = xCIndex
        xCell.Interior.ColorIndex = xCellPre.Interior.ColorIndex
      ElseIf Err.Number = 9 Then
        MsgBox "Too many duplicate companies!", vbCritical, "Kutools for Excel"
        Exit Sub
      End If
      On Error GoTo 0
    Next
End Sub

На самом деле это работает в том смысле, что онодинаковые значения в столбце C с одинаковым цветом.

Однако моя проблема в том, что я действительно хочу, чтобы этот код раскрашивал каждую группу повторяющихся значений цветом UNIQUE .Мой код не делает этого.Он повторяет один и тот же цвет для разных групп повторяющихся значений.

У вас есть представление о том, как изменить этот код, чтобы в каждой группе повторяющихся значений в столбце C был УНИКАЛЬНЫЙ другой цвет?

Спасибо :)

1 Ответ

0 голосов
/ 06 июня 2019

Вместо использования colorIndex, поворачивайтесь по значениям RGB, как подсказал Кирилл в комментариях.

if If xCellPre.Interior.Pattern = xlNone then xcell.interior.color = RGB((xCIndex * 159) Mod 256, (xCIndex * 68) Mod 256, (xCIndex * 47) Mod 256)

Значения 159, 68 и 47 позволят вам пройтись по случайным ощущениямчерез цвета, так что вы не получите похожие цвета на некоторое время.Часть mod 256 гарантирует, что значения находятся в допустимом диапазоне 0-255.

...