Color code duplicate entries in a field of an excel using alternating colors

我只是一个虾纸丫 提交于 2019-12-10 19:11:45

问题


I have extracted a list of duplicates from a MySQL database to an excel sheet. This excel shows that we have duplicates (~1,900) and sometimes triplicate entries based on a single field of the excel sheet.

For example:

10019
10019
10048
10048
10060
10060

How can I go about coloring the duplicate pairs so that they can be easily visualized as a pair for every pair. Basically I would like to color fill each duplicate pair with an alternating color so that I could easily see the pairs.


回答1:


The process you are talking about is call 'duplicate banding'. A pair of Scripting.Dictionary objects should take care of this easily.

Sub colorDuplicateColor2()
    Dim d As Long, dODDs As Object, dEVNs As Object, vTMPs As Variant
    Dim bOE As Boolean

    Set dODDs = CreateObject("Scripting.Dictionary")
    Set dEVNs = CreateObject("Scripting.Dictionary")
    dODDs.CompareMode = vbTextCompare
    dEVNs.CompareMode = vbTextCompare

    With Worksheets("Sheet7")
        If .AutoFilterMode Then .AutoFilterMode = False

        With .Range(.Cells(1, "C"), .Cells(Rows.Count, "C").End(xlUp))

            With .Columns(1)
                .Cells.Interior.Pattern = xlNone
            End With

            With .Resize(.Rows.Count - 1, 1).Offset(1, 0)
                vTMPs = .Value2
            End With

            For d = LBound(vTMPs, 1) To UBound(vTMPs, 1)
                'the dictionary Items have to be strings to be used as filter criteria
                If Not (dODDs.exists(vTMPs(d, 1)) Or dEVNs.exists(vTMPs(d, 1))) Then
                    If bOE Then
                        dODDs.Item(vTMPs(d, 1)) = CStr(vTMPs(d, 1))
                    Else
                        dEVNs.Item(vTMPs(d, 1)) = CStr(vTMPs(d, 1))
                    End If
                    bOE = Not bOE
                End If
            Next d

            With .Columns(1)
                .AutoFilter Field:=1, Criteria1:=dODDs.Items, Operator:=xlFilterValues
                .SpecialCells(xlCellTypeVisible).Interior.Color = RGB(210, 210, 210)
                'use this to band the entire row
                '.SpecialCells(xlCellTypeVisible).EntireRow.Interior.Color = RGB(210, 210, 210)
                'use this to band the row within the UsedRange
                'Intersect(.Parent.UsedRange, .SpecialCells(xlCellTypeVisible).EntireRow).Interior.Color = RGB(210, 210, 210)
                .AutoFilter
                .AutoFilter Field:=1, Criteria1:=dEVNs.Items, Operator:=xlFilterValues
                .SpecialCells(xlCellTypeVisible).Interior.Color = RGB(255, 200, 200)
                .Cells(1).EntireRow.Interior.Pattern = xlNone
            End With

        End With

        If .AutoFilterMode Then .AutoFilterMode = False
    End With

    dODDs.RemoveAll: Set dODDs = Nothing
    dEVNs.RemoveAll: Set dEVNs = Nothing
    Erase vTMPs

End Sub

The data must be sorted on the duplicate criteria column of course.

      

This process could be easily adjusted for full row or row-within-data-block banding.



来源:https://stackoverflow.com/questions/35437981/color-code-duplicate-entries-in-a-field-of-an-excel-using-alternating-colors

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!