是否可以使用Excel 2003中的函数删除整行,如果它与前一行相同?例如:
我想删除#2,7#和#8,但我不希望删除#5和#9。我想删除一个重复的条目,如果它是下一个。我希望我能够清楚地告诉你。 如果没有功能,我该如何在VBA中执行此操作?提前谢谢!
答案 0 :(得分:3)
如果它是一次性的,你可以通过在下一栏中添加一个公式,在没有VBA的情况下做到这一点 - 让我们说你的专栏是A:
表示如下:
=IF(A1=A2,"DELETE","")
拖动公式
答案 1 :(得分:1)
这可能是适合的,删除所有重复的行(物理上,不仅仅是单元格数据!),因此请记住,只有在使用单列工作表时才能使用它。否则你会丢失一些其他数据。
Sub Unduplicate()
Dim prev As String
Dim sel As Range
Dim i As Integer
Set sel = Range(Selection, Selection)
prev = sel.Offset(0).Value ' set prev as the first value - never will be deleted
i = 1 ' start from 2nd row
Do While sel.Offset(i).Value <> "" And sel.Offset(i).Value <> ""
If sel.Offset(i).Value = prev Then ' if duplicate - delete row
sel.Offset(i).EntireRow.Delete
Else ' else set new prev, and go further
prev = sel.Offset(i).Value
i = i + 1
End If
Loop
End Sub
为你的例子运行这个宏之后,我得到了:
您可以修改它,将值存储在数组中,然后用记忆数组填充列而不是删除行,但现在应该很容易。
答案 2 :(得分:1)
快速注释...如果要删除整行,请确保从范围的底部开始工作。如果您从范围顶部向下工作,可能会得到一些意想不到的结果。您可能还需要考虑清除单元格值然后排序,而不是删除。我会为你写一个例子,但我的时间很短。如果你遇到困难我可以在以后为你写。
修改强>
我的原始答案不一定正确,如下面的makciook解决方案所示。在过去,我错误地以这种方式处理问题(不要将其用作解决方案!!!):
Sub duplicates()
Dim c As Range, rng As Range
Set rng = Selection ''Select the entire list before running
For Each c In rng
If c.Value = c.Offset(-1, 0).Value Then c.EntireRow.Delete
Next
End Sub
使用此脚本,一旦删除行并向上移动,单元格范围不会重置。所以运行它不会在列表中捕获第二个香蕉副本。作为替代方案,我通常会找到最后一行,然后按照第一行的方式工作,以便在发生删除时将行向上移动。如果可能的话,我会给自己一个-1。