使用 VBA 查找重复行

问题描述 投票:0回答:2

我需要识别 VBA 中的重复行(注意:重复行意味着在考虑的所有列中与原始行的值相等)。我发现了几个程序可以根据某一列执行此操作,并且我知道可以使用

Range.RemoveDuplicates Method (Excel)
快速找到并删除整行的重复行,但这对我的识别没有帮助。假设给出以下行:

EE  10  12  13
jk  56  AA  00
BB  32  af  12
21  CC  CC  fg
as  DD  89  fg
AA  67  45  vb
fh  56  df  kl
cv  fh  CC  34
af  xv  DD  67
EE  10  12  13

在此示例中,要标识第一行和最后一行(在函数中返回或以某种类型的颜色标记)。请注意,我不想删除它们,而是将它们保存在新工作表上,但这不是问题。问题只是识别。

我的真实数据大约有 30,000 行,因此性能也相当重要。

vba excel filter find duplicates
2个回答
1
投票

也许是这样的:

Sub highlight()

    firstRow = 2
    lastrow = 30
    
    For j = firstRow To lastrow
        If Range(Cells(j, 1), Cells(j, 4)).Interior.Color = 255 Then
            'already highlighted, found to be duplicate.  Skip.
        For i = firstRow + 1 To lastrow
            If Range(Cells(i, 1), Cells(i, 4)).Interior.Color = 255 Then
                'already highlighted, found to be duplicate.  Skip.
            ElseIf Cells(i, 1) & Cells(i, 2) & Cells(i, 3) & Cells(i, 4) _
                = Cells(j, 1) & Cells(j, 2) & Cells(j, 3) & Cells(j, 4) Then
                'Dupe found, highlight as red
                Range(Cells(i, 1), Cells(i, 4)).Interior.Color = 255
            End If
        Next
        End If
    Next
    
End Sub

此解决方案需要一个嵌套循环。 跳过已经被发现是骗局的项目很重要,我为此使用突出显示。

未经测试,但应该接近。


0
投票
Sub szukanie()

    firstRow = 1
    lastrow = 13

    For j = firstRow To lastrow
        If Range(Cells(j, 1), Cells(j, 4)).Interior.Color = 255 Then
                For i = firstRow + 1 To lastrow
                    If Range(Cells(i, 1), Cells(i, 4)).Interior.Color = 255 Then
                        ElseIf Cells(i, 1) & Cells(i, 2) & Cells(i, 3) & Cells(i, 4) = Cells(j, 1) & Cells(j, 2) & Cells(j, 3) & Cells(j, 4) Then

                            Range(Cells(i, 1), Cells(i, 4)).Interior.Color = 255

                    End If
                Next
        End If
    Next

End Sub

但是你必须突出显示第一行

© www.soinside.com 2019 - 2024. All rights reserved.