根据ObjectList中的2列删除重复项

时间:2019-06-13 12:12:51

标签: vba

我想删除表中的重复值。它是具有数千行的ListObject表。 我无法使用我的代码,并且我正在对区域使用功能RemoveDuplicates,条件是如果2个相对列中有重复项,则删除表中的行。

这是运行代码之前的样子:

enter image description here

在我的代码中,仅基于C:C和E:E列,我需要检查这两行中每行是否有重复项,然后删除它们,仅保留一行。

这是我想要的结果:

enter image description here

这是我的无效代码。我不确定是因为我的表是列表对象还是因为分配数组错误?

Sub test_Duplicate()
  Dim endrow As Long
  Dim rng As Range
  Dim ws As Worksheet
  Set ws = Sheets("Sheet4")

      With ws
        endrow = .Cells(.Rows.Count, 3).End(xlUp).Row
        Set rng = .Range(.Cells(2, 3), .Cells(endrow, 6))
        rng.RemoveDuplicates Columns:=Array(1, 3), Header:=xlNo
    End With


End Sub

我将不胜感激。 我注意到无论我的数据是作为List Object出现在表中还是没有它,我还是会收到错误nr 9。

2 个答案:

答案 0 :(得分:0)

这将起作用:

只需更改表名即可。我的名字是Table1

Sub test_Duplicate()

  Dim ws As Worksheet
  Set ws = Sheets("Sheet4")

    With ws
        .Range("Table1[#All]").RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes
    End With


End Sub

选择表时,可以在Design选项卡上找到表名。

答案 1 :(得分:0)

这是我通过浏览网页找到的最佳解决方案。

Sub RemoveDuplicates()
Const TEST_COLUMN As String = "A"
Dim i As Long
Dim iLastRow As Long
Dim rng As Range
Dim ws As Worksheet
Set ws = Worksheets("Sheet4")

With ws
    iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    For i = 1 To iLastRow
    If .Evaluate("SUMPRODUCT(--(A" & i & ":A" & iLastRow & "=A" & i & ")," & _
    "--(I" & i & ":I" & iLastRow & "=I" & i & "))") > 1 Then
    If rng Is Nothing Then
    Set rng = .Cells(i, "A").Resize(, 9)
    Else
    Set rng = Union(rng, .Cells(i, "A").Resize(, 9))
    End If
    End If
    Next i

If Not rng Is Nothing Then rng.Delete

End With

 End Sub