检查所有列后删除重复的行

时间:2015-06-18 00:48:34

标签: excel vba excel-vba duplicates

我已经编写了下面的宏来检查所有列后删除重复的行。基于逻辑,我认为它工作正常,但输出不正确,应该显示的一些行被删除。任何人都可以帮助我吗?

在运行此宏之前,我有另一个宏来按几列对数据进行排序,以确保将相似的行组合在一起,因此宏可以考虑到这一点,并且只检查它上面的行而不是检查所有的行?非常感谢任何帮助!

Sub Delete_Repeated_Rows()
Dim Rng As Range
Dim ColumnCounter As Integer

Set Rng = ActiveSheet.UsedRange.Rows

'Using ColumnCounter to hold total number of cells that match. If all of them match, delete row'

 For r = Rng.Rows.Count To 1 Step -1
    ColumnCounter = 0
    For Col = Rng.Columns.Count To 1 Step -1 'Loop through columns and find matches'
        If Application.WorksheetFunction.CountIf(Rng.Columns(Col), Rng.Cells(r, Col)) > 1 Then
            ColumnCounter = ColumnCounter + 1
        End If
    Next Col

    If ColumnCounter = Rng.Columns.Count Then
        Rng.Rows(r).EntireRow.Delete
    End If
Next r
End Sub

2 个答案:

答案 0 :(得分:5)

使用内置的RemoveDuplicates命令。它比循环遍历行快得多。框中唯一的技巧是传递列参数的数组。

Sub DeDupe()
    Dim intArray As Variant, i As Integer
    Dim rng As Range
    Set rng = ActiveSheet.UsedRange.Rows
    With rng
        ReDim intArray(0 To .Columns.Count - 1)
        For i = 0 To UBound(intArray)
            intArray(i) = i + 1
        Next i
        .RemoveDuplicates Columns:=(intArray), Header:=xlYes
    End With
End Sub

答案 1 :(得分:2)

要删除副本,您只需点击数据功能区>上的“删除副本”按钮即可。数据工具。 enter image description here
以下是演示:
我在工作表中有这样的数据:
enter image description here
我希望在A栏中有独特的数据 单击“删除重复”按钮,然后在屏幕提示下取消,我取消选中columnB
enter image description here
单击确定按钮,会出现一个通知框,告诉我已删除2个重复值,并在以下屏幕中找到5个唯一值:
enter image description here
以下是最终结果:
enter image description here