如何查找重复的行然后删除其中一行?需要VBA

use*_*868 3 excel vba excel-vba

我想知道是否有人知道如何删除重复的行..比如说,

   A        B       C

1  1        3       4
2  2        6       9
3  TEST     1       2
4  TEST     1       2
5  Both     1
6  Hi               2
7  None     3       3
8  Loud     4       4
Run Code Online (Sandbox Code Playgroud)

对于上面的特定示例,TEST重复两次..在其他一些情况下,名称可以是其他一些类型,如NOON,Morning等.而第8行不一定是最后一行.我不知道如何比较行来检查重复的名称,然后删除它们.我需要运行一个宏,所以我需要VBA.如果您知道,请与我分享..将不胜感激!

尝试代码:

 Sub Macro1()

   Dim LastRow As Long, n As Long, rowstodelete As Long

    LastRow = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row

      For n = 1 To LastRow

    With Worksheets("Sheet1").Cells(n, 1)
         If .Cells(n, 1) = .Cells(n + 1, 1) Then
           rowstodelete = Worksheets("Sheet1").Cells(n, 1)
           Rows(rowstodelete).Select
           Selection.Delete Shift:=xlUp
         End If
   End With
       Next n

 End Sub
Run Code Online (Sandbox Code Playgroud)

不幸的是,在.Cells(n,1)上有运行时错误.我不知道它为什么......如果你知道某些东西可以与我分享或者修改它.会感恩的!

Sid*_*out 6

user1204868

建议在删除行时,始终以反向模式执行.看到这段代码.您也无需在删除前选择单元格.这将减慢你的代码:)

Sub Sample()
    Dim LastRowcheck As Long, n1 As Long

    With Worksheets("Sheet1")
        LastRowcheck = .Range("A" & .Rows.Count).End(xlUp).Row

        For n1 = LastRowcheck To 1 Step -1
            If .Cells(n1, 1).Value = Cells(n1 + 1, 1).Value Then
               .Rows(n1).Delete
            End If
        Next n1
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

这是一种更好,更快的方式.

Sub Sample()
    Dim LastRowcheck As Long, n1 As Long
    Dim DelRange As Range

    With Worksheets("Sheet1")
        LastRowcheck = .Range("A" & .Rows.Count).End(xlUp).Row

        For n1 = 1 To LastRowcheck
            If .Cells(n1, 1).Value = Cells(n1 + 1, 1).Value Then
                If DelRange Is Nothing Then
                    Set DelRange = .Rows(n1)
                Else
                    Set DelRange = Union(DelRange, .Rows(n1))
                End If
            End If
        Next n1

        If Not DelRange Is Nothing Then DelRange.Delete
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

跟进

任何想法为什么反向行删除更好? - 富兰克林29秒前

删除行时,当您For定位行数时,循环会变得混乱.然后,您必须编写额外的代码行,以跟踪您删除的行.它也会减慢您的代码:)当您反向删除时,您不必考虑已删除的行,因为它不属于当前运行的循环.这样你的代码就会更快.但是就像我上面提到的那样,如果你没有使用反向行删除,那么使用我给出的第二个代码.那更快.

有一点,我想提一下.如果您使用的是Excel 2007/2010,那么@brettdj建议的一行代码是最快的:)

HTH

希德