【问题标题】:Delete all duplicate rows Excel vba删除所有重复行Excel vba
【发布时间】:2017-04-07 17:07:00
【问题描述】:

我有一个包含两列的工作表:日期和名称。我想删除所有完全重复的行,只留下唯一值。

这是我的代码(不起作用):

Sub DeleteRows()

Dim rng As Range
Dim counter As Long, numRows As Long

With ActiveSheet
    Set rng = ActiveSheet.Range("A1:B" & LastRowB)
End With
numRows = rng.Rows.Count

For counter = numRows To 1 Step -1
    If rng.Cells(counter) Like rng.Cells(counter) - 1 Then
        rng.Cells(counter).EntireRow.Delete
    End If
Next

End Sub

原因似乎是“像 rng.Cells(counter)-1” - 我得到“类型不匹配”。

【问题讨论】:

  • 试试rng.Cells(counter - 1)
  • 您是否尝试过数据 -> 删除重复项?或者您是否需要为这个特定应用程序使用 VBA?
  • 上面的代码是在一个相当大的工作表上做更多工作的过程的一部分,所以我想通过单击一个按钮来完成整个工作。
  • 到目前为止,您尚未接受您提出的所有问题的任何答案。有什么原因吗?

标签: excel vba


【解决方案1】:

您可以使用RemoveDuplicates 方法:

Sub DeleteRows()

    With ActiveSheet
        Set Rng = Range("A1", Range("B1").End(xlDown))
        Rng.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
    End With

End Sub

【讨论】:

  • 太棒了。如果您发现它有用,请单击复选框以“接受”此答案。它帮助我积累了那些甜蜜的业力点:)
  • 它也去掉了空白行。太棒了!
  • 如何让它删除整行?
  • 我可以将Array(1, 2) 设为数组变量吗,因为它给了我一个错误的参数
  • @mhmdshawqi 您可以尝试对整个数据表进行计数,然后在删除重复项后,再进行一次计数,然后在范围上使用 EntireRow.delete
【解决方案2】:

任何列中的重复值都可以通过简单的 for 循环删除。

Sub remove()
Dim a As Long
For a = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If WorksheetFunction.CountIf(Range("A1:A" & a), Cells(a, 1)) > 1 Then Rows(a).Delete
Next
End Sub

【讨论】:

    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 2013-04-08
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多