【发布时间】:2015-12-23 11:01:28
【问题描述】:
我正在尝试提出一个精简且防错的宏来删除 A 列中包含重复值的行。我有两种解决方案,并且都有它们的优点。它们都不是我想要的。
我需要删除包含重复项的行,但保留包含重复项的最后一行。
-
这个太棒了。它没有循环并且可以立即工作。问题是它删除了包含重复项的后续行,因此留下了第一次出现的重复项(我需要最后一个/或第二个 - 大多数只显示两次)
Sub Delete() ActiveSheet.Range("A:E").RemoveDuplicates Columns:=1, Header:=xlNo End Sub -
这个从底部开始删除重复项。它比第一个持续时间更长(我有大约 6k 行)但是这个问题是它不会全部删除它们。留下了一些重复项,并且在我再次运行相同的代码后将它们删除。甚至还剩下更少的复制品。基本上需要运行它多达 5 次,然后我最终得到了干净的列表。
`
Sub DeleteDup()
Dim LastRowcheck As Long, n1 As Long, rowschecktodelete As Long LastRowcheck = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row For n1 = 1 To LastRowcheck With Worksheets("Sheet1").Cells(n1, 1) If Cells(n1, 1) = Cells(n1 + 1, 1) Then Worksheets("Sheet1").Cells(n1, 1).Select Selection.EntireRow.Delete End If End With Next n1 End Sub
` 有没有办法改进其中的任何一个以使其正常工作,或者有更好的解决方案吗?非常感谢任何信息。谢谢
【问题讨论】:
-
代码运行时工作表是否在A列排序?
-
嗨。是的。 A 列是数字列表,但它们被格式化为文本。因此,可能缺少一条使其数值化的行。不管我是否把它变成#,我仍然得到相同的结果/问题。这些数字从最小到最大,因此重复项是一个在另一个之下。