删除列中有重复信息的行
我正在写一个代码,将数据从一张表复制到另一张,我已经得到了这个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文档 , 另一页是更详细的实现。 他们应该清除你可能有的任何问题。