如何使用宏VBA删除特定列中的重复行

时间:2018-06-22 09:43:49

标签: excel vba excel-vba excel-2010 excel-2007

我对如何删除Excel中特定列具有相同值的行有问题。

请为我的问题查看以下屏幕截图:
enter image description here

在第 4行: FullName: A SeqNo:003
在第 5行: FullName: A SeqNo:003

因此,行 4 5 具有相同的值,因此我想删除其中之一,但我不想删除行 {{1} } ,由 automatically 提出,但前提是只有 random



条件如下: enter image description here



这应该是正确的输出: enter image description here


那么我怎样才能通过宏vba实现呢?

预先感谢!

2 个答案:

答案 0 :(得分:1)

记录一个宏,该宏按最新到最旧的日期列排序,然后使用三列上的“删除重复项”功能,但在“删除重复项”对话框中取消选中日期列。默认情况下,Excel会保留它的第一个重复项,因此通过排序,您将删除具有较早日期的行。

您应该可以自己整理记录的代码。

答案 1 :(得分:1)

尝试一下。

Sub test()
    Dim vDB, vR()
    Dim X As New Collection
    Dim Str As String
    Dim i As Long, j As Long, r As Long, c As Integer
    Dim n As Long

    vDB = Range("a1").CurrentRegion
    r = UBound(vDB, 1)
    c = UBound(vDB, 2)

    On Error Resume Next

    For i = 1 To r
        Str = vDB(i, 1) & vDB(i, 4)
        Err.Clear
        X.Add Str, Str
        If Err.Number = 0 Then
            n = n + 1
            ReDim Preserve vR(1 To c, 1 To n)
            For j = 1 To c
                vR(j, n) = vDB(i, j)
            Next j
        End If
    Next i
    For i = 1 To n
        For j = 1 To r
            If vDB(j, 1) = vR(1, i) And vDB(j, 4) = vR(4, i) Then
                If vDB(j, 5) >= vR(5, i) Then
                    vR(2, i) = vDB(j, 2)
                    vR(5, i) = vDB(j, 5)
                End If
            End If
        Next j
    Next i
    Sheets.Add
    Range("a1").Resize(n, c) = WorksheetFunction.Transpose(vR)

End Sub