删除列中有重复信息的行

我正在写一个代码,将数据从一张表复制到另一张,我已经得到了这个function正常工作。 现在,我试图编写它来删除任何包含重复信息的行,这些信息基于F列中的信息ID号。我们的一部分stream程是在每一行都工作的时候在E列中手动input。

所以我的最终目标是让代码删除E列为空的列,F列是重复的。 我的代码运行,但不删除任何东西。 我真的希望我只是失去了一些显而易见的东西。

For i = 1 To Range("f" & Rows.Count).End(xlUp).Row If Cells(i, 5).Value = "" Then 'if column E is blank on row i x = Cells(i, 6).Value If Not IsError(Application.Match(x, "F:F", 0)) Then '& if that row is a duplicate ActiveSheet.Range(x).EntireRow.Delete 'delete new duplicate row End If End If Next i 

所以在代码中需要解决一些错误。 首先,如果你正在遍历一个范围并删除行,最好从底部开始,然后继续前进。 这可以防止你的迭代器在一行上,这行被删除,循环实质上跳过下一行的问题。

接下来,您正在寻找x F列中的Match ,其中包含F列中的值。因此,它将始终返回一个值(本身,最小值)。 也许尝试使用COUNTIF ,看看它是否大于1可能是一个更好的select?

接下来,您使用Cells(i, 6)的值填充variablesx ,但是在删除时尝试将其用作范围。 将您的代码更改为以下内容并查看它是否有效:

 For i = Range("f" & Rows.Count).End(xlUp).Row To 1 Step -1 If Cells(i, 5).Value = "" Then 'if column E is blank on row i x = Cells(i, 6).Value If Application.Countif(Columns(6), x) > 1 Then '& if that row is a duplicate ActiveSheet.Rows(i).Delete 'delete new duplicate row End If End If Next i 

尝试一下,

 For i = Range("f" & Rows.Count).End(xlUp).Row to 1 Step -1 If Cells(i, 5).Value = "" Then 'if column E is blank on row i x = Cells(i, 6).Value If Application.Countif(Columns(6), x) > 1 Then '& if that row is a duplicate Rows(i).EntireRow.Delete 'delete new duplicate row End If End If Next i 

您试图删除行号x ,而不是i 。 另外,一切都将被匹配一次。

为什么不使用.RemoveDuplicates方法? 这比循环更快。 以下是关于它的使用的一个粗略的概述:

 With Range .RemoveDuplicates Columns:=Array(6), Header:=xlYes End With 

这里是该方法的msdn文档 , 另一页是更详细的实现。 他们应该清除你可能有的任何问题。