我正在尝试删除具有重复值的整个行。如果列中的值为" E"在两行中是相同的,我想删除具有重复值的所有行。
其他字段可能是该行的重复,也可能不是该行的重复,最多可能有10个重复项,总行数(#rows> 4000)。这只是一个大宏的一部分,所以我不能使用excel函数。这是我到目前为止删除行:
Sub AAAAH()
Application.ScreenUpdating = False
Dim i As Single
Dim j As Single
BottomLineRelease = Sheets("Hours Of Interest").Range("E" & Rows.Count).End(xlUp).Row + 1
rowcount = Sheets("Hours Of Interest").Range("E2:E" & BottomLineRelease).Rows.Count
For i = 2 To Sheets("Hours Of Interest").Cells(Rows.Count, "E").End(xlUp).Row
If Sheets("Hours Of Interest").Range("E" & i) = Sheets("Hours Of Interest").Range("E" & i - 1) Then
j = i - 1
Rows(j).Select
Selection.delete Shift:=xlUp
End If
Next i
Application.ScreenUpdating = True
End Sub
这不仅会导致Excel崩溃,而且会导致" Selection.delete Shift:= xlup"不允许"删除"保持资本化。每次我点击它,它都会回到小写。
有没有人知道在VBA中删除这些重复行的更快或最不实用的方法?
答案 0 :(得分:2)
Selection
(= Application.Selection
)仅被声明为Object
,因为它可以采用各种对象(范围,形状对象,图表等)。因此,智能感知也不起作用,只有在.Delete
是有效方法时才会确定。
尝试
Sheets("Hours Of Interest").Rows(j).Delete Shift:=xlUp
如果你在代码中使用表格(...)。范围,你绝不应该懒惰,如果没有明确的引用,你永远不要使用Range
或Rows
或Cells
em>可能在不同的工作表上删除。
此外,如果从上到下删除行,则每次删除都会更改以下行的行号。 所以你应该用
删除backwarsfor i = [..maximum..] to 0 step -1
答案 1 :(得分:1)
您不需要循环来隔离唯一值。您可以过滤列E以获取唯一值,将这些值复制到新工作表,然后删除旧工作表。
lastRow = Range("A1000000").End(xlUp).Row
Range("A1:H" & lastRow).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("E1:E" & lastRow), Unique:=True
Cells.Copy
Sheets.Add
ActiveSheet.Paste
Application.DisplayAlerts = False
Sheets("oldSheet").Delete
Application.DisplayAlerts = True
如果内存服务,这比循环更快。