如何在VBA-Excel中删除重复行和倒序重复行?

3

-已更新-

我想知道如何根据两列中的值删除重复行,其中重复项也可以以相反的顺序出现。我想要删除整行,而不仅仅是列中的重复单元格。我在论坛上搜索了,但找不到确切的答案。
如果数据看起来像这样:
AA
AB
BA
CA
AC

I want to keep:

AA
AB
CA

到目前为止我只看到过删除单向重复代码的方法(例如在Excel vba中删除所有重复行),这种方法不能从上面的示例中删除任何行。

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

有人知道或者可以给我指引正确的方向吗?

谢谢 Lisarv


你是否总是想保留第一次出现的内容,还是有其他规则来决定应该保留哪个? - psubsee2003
不,行号无关紧要,请查看我的更新问题。 - Lisarv
1个回答

5

既然您已经有了基于单个列的解决方案,我们将找到一种方法来应用该解决方案。对于列AB中的数据,在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

这种方法与我预期的不同,因此我将继续保持问题的开放状态。我希望得到VBA代码,因为我需要重做这个和其他操作多次,并且想避免手动步骤。但是,它确实有效,只需将逗号更改为分号即可!所以确实感谢@Gary。 - Lisarv
@Lisarv 我也会寻找不需要“辅助列”的解决方案。 - Gary's Student
@Lisarv 请查看我的 EDIT#1 - Gary's Student

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接