【问题标题】:How can I remove duplicate rows and reversed-order duplicate rows in VBA-Excel如何在 VBA-Excel 中删除重复行和倒序重复行
【发布时间】:2015-08-16 02:34:21
【问题描述】:

-更新-

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

如果数据看起来像:

AA
AB
BA
CA
AC

我想保留:

AA
AB
CA

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

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

有谁知道或可以提示我正确的方向吗?

谢谢 浏览器

【问题讨论】:

  • 您是否总是希望保留第一次出现,或者是否有不同的规则应该保留。
  • 不,哪一行都没有关系,请参阅我更新的问题。

标签: excel duplicate-removal vba


【解决方案1】:

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

【讨论】:

  • 这是另一种解决方法,超出了我的预期,因此我将继续讨论这个问题。我希望使用 vba 代码,因为我需要多次重做此操作和其他操作,并且希望避免手动步骤。但是,它确实有效,尽管通过将逗号更改为分号!所以确实感谢@Gary
  • @Lisarv 我也会寻找没有“帮助”列的解决方案。
  • @Lisarv 查看我的EDIT#1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多