如何删除 VBA-Excel 中的重复行和倒序重复行
How can I remove duplicate rows and reversed-order duplicate rows in VBA-Excel
-更新 -
我想知道如何根据两列中的值删除重复行,其中重复项也可能以相反的顺序出现。我想删除整行,而不仅仅是列中的重复单元格。我已经搜索了论坛,但无法找到确切的答案。
如果数据看起来像:
AA
AB
BA
CA
AC
我想保留:
AA
AB
CA
到目前为止,我只看到了删除单向重复项的代码(例如 Delete all duplicate rows Excel vba ),这不会从上面的示例中删除任何行。
我需要计算两个命名点之间的距离,所以保留哪一行并不重要。也许我还应该指定格式是例如每个单元格中的 A1 和 A2(字母 + 数字),因此 A1+A2 和 A2+A1 将是重复的。不确定这是否重要。
有谁知道或可以向我提示正确的方向吗?
谢谢
丽莎
由于您已经有了基于单列的解决方案,我们将找到一种应用该解决方案的方法。使用列 A 和 B 中的数据,在 C1 中输入:
=IF(A1<B1,A1 & CHAR(1) & B1,B1 & CHAR(1) & A1)
然后抄下来。然后将您的解决方案应用于列 C:
注:
我们使用 CHAR(1) 来防止意外匹配。
编辑#1
这是一个没有使用 C 列的纯 VBA 解决方案:
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
-更新 -
我想知道如何根据两列中的值删除重复行,其中重复项也可能以相反的顺序出现。我想删除整行,而不仅仅是列中的重复单元格。我已经搜索了论坛,但无法找到确切的答案。
如果数据看起来像:
AA
AB
BA
CA
AC
我想保留:
AA
AB
CA
到目前为止,我只看到了删除单向重复项的代码(例如 Delete all duplicate rows Excel vba ),这不会从上面的示例中删除任何行。
我需要计算两个命名点之间的距离,所以保留哪一行并不重要。也许我还应该指定格式是例如每个单元格中的 A1 和 A2(字母 + 数字),因此 A1+A2 和 A2+A1 将是重复的。不确定这是否重要。
有谁知道或可以向我提示正确的方向吗?
谢谢 丽莎
由于您已经有了基于单列的解决方案,我们将找到一种应用该解决方案的方法。使用列 A 和 B 中的数据,在 C1 中输入:
=IF(A1<B1,A1 & CHAR(1) & B1,B1 & CHAR(1) & A1)
然后抄下来。然后将您的解决方案应用于列 C:
注:
我们使用 CHAR(1) 来防止意外匹配。
编辑#1
这是一个没有使用 C 列的纯 VBA 解决方案:
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