查找具有重复值的匹配行和空白单元格

时间:2014-12-08 17:51:37

标签: excel-vba vba excel

我似乎无法找到我使用Excel面临的常见场景的解决方案。我的VBA能力有限,所以我不知道如何继续编码,但这就是我想要解决的问题。

我有一个电子表格,列出的行经常会有其他行 匹配以前的行。例如,同一客户可能有两行,其中数据相同,只是第二行具有不同的电话号码。其他所有内容都是相同的,包括A列中的唯一ID。我要做的是创建代码,找到匹配的第二行(或其他行),并删除与前一行匹配的后续行中的任何字段,留下任何字段只有不同的价值观。

这个网站不会让我插入一个显示我正在谈论的内容的图表,但一个例子是一个包含三列ID的电子表格,名称,电话。 ID号99有两个具有相同ID和名称的条目,但电话不同。我希望能够删除ID和名称重复的字段,只留下电话。

在此示例中,它是电话号码,但可以是任何列或列组合。

有可行的方法吗?

1 个答案:

答案 0 :(得分:1)

以下已经过测试:

Sub test()

For Each cell In Range("A3:C1000")

  If cell.Value = cell.Offset(-1, 0).Value Then cell.ClearContents

Next

End Sub

只需将Range更改为您需要的范围,跳过第一行(我跳过第2行),因为它无论如何都是唯一的锚。 附:这只能顺序工作,所以你需要一个排序列表

修改

第一个解决方案显然是错误的,道歉,请在下面尝试,请注意其中有一个警告:如果您在任何特定列中有一个条目重复其他条目实际上是不同的 - 请说同一个电话号码对于不同的客户,它将 ALSO 删除该条目。 它会针对同一列中的所有先前条目检查每个条目,如果它先前出现,则会将其删除。

Sub test()
Dim cell As Range
Dim c As Range

For Each cell In Range("A3:C1000")

  On Error Resume Next
  Set c = Range(Cells(2, cell.Column), Cells(cell.Row - 1, cell.Column)).Find(cell.Value)
  On Error GoTo 0
  If Not c Is Nothing Then

    cell.ClearContents

  End If

Next

End Sub