excel:根据3列检查重复行并保留一行

时间:2014-02-09 14:58:53

标签: excel vba excel-vba

这可能有点问题,但我想知道以下是否可行。这完全基于我对Copy Range and Paste Values in another Sheet's specific Range

的初步问题

我有一张包含大约12列的工作表,其中复制了相同类型的数据,这意味着两行或更多行可以包含完全相同的数据,但是如果我可以检查重复数据,它将基于3个特定列

我不想为此任务使用自动筛选或条件格式,因为工作表可以包含数百到数千行,我希望能够找到重复项,删除它们并保留一个原始文件。我还在这里阅读了有关根据列条件删除重复项的其他帖子,但到目前为止没有一个对我有效。

数据范围是从A到P和向下,识别重复的3列是A(数字,ID),B(日期)和P(文本字符串) )。如果这些数据来自,它将始终具有相同的格式,并且将始终放在相同的列中,这就是为什么如果A,B,P相同,则认为它是重复的。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

此代码适用于我(lastrow基于this asnwer @SiddharthRout):

Sub test()

    Dim lastrow As Long

    With ThisWorkbook.Worksheets("Sheet1")
        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            lastrow = .Cells.Find(What:="*", _
                          After:=.Range("A1"), _
                          Lookat:=xlPart, _
                          LookIn:=xlFormulas, _
                          SearchOrder:=xlByRows, _
                          SearchDirection:=xlPrevious, _
                          MatchCase:=False).Row
        Else
            lastrow = 1
        End If

        'Array(1, 2, 16) means 1 - for A, 2 for B and 16 for P columns
        .Range("A1:P" & lastrow).RemoveDuplicates Columns:=Array(1, 2, 16), _
            Header:=xlYes
    End With
End Sub