如何在VBA-Excel中删除重复行和反向排序的重复行

时间:2015-06-02 10:37:32

标签: excel-vba duplicate-removal vba excel

-updated -

我想知道如何根据两列中的值删除重复的行,其中重复项也可以按相反的顺序发生。我想删除整行,而不仅仅是列中的重复单元格。我搜索了论坛,但无法找到确切的答案。

如果数据如下:

AA
AB
BA
CA
AC

我想保留:

AA
AB
CA

到目前为止,我只看到了删除单向重复项的代码(例如Delete all duplicate rows Excel vba),它不会从上面的示例中删除任何行。

我需要计算两个命名点之间的距离,所以我保留的行无关紧要。也许我还应该指明格式是例如每个单元格中的A1和A2(字母+数字),因此A1 + A2和A2 + A1将是重复的。不确定这是否重要。

有没有人知道或可以向我暗示正确的方向?

由于 Lisarv

1 个答案:

答案 0 :(得分:1)

由于您已经拥有基于单一列的解决方案,因此我们会找到一种方法来应用该解决方案。使用 A B 列中的数据,在 C1 中输入:

=IF(A1<B1,A1 & CHAR(1) & B1,B1 & CHAR(1) & A1)

并复制下来。然后将您的解决方案应用于列 C

enter image description here

注意:

我们使用CHAR(1)来防止意外匹配。

修改#1

这是一个纯VBA解决方案,不使用 C

Sub RowKiller()
   Dim N As Long, C() As String, i As Long
   Dim aa As String, bb As String, cc As String
   Dim s As String
   s = Chr(1)
   N = Cells(Rows.Count, "A").End(xlUp).Row
   ReDim C(1 To N)

   For i = 1 To N
      aa = Cells(i, 1).Value
      bb = Cells(i, 2).Value
      If aa < bb Then
         C(i) = aa & s & bb
      Else
         C(i) = bb & s & aa
      End If
   Next i

   For i = N To 2 Step -1
      cc = C(i)
      For j = i - 1 To 1 Step -1
         If cc = C(j) Then Rows(i).Delete
      Next j
   Next i
End Sub