删除整行不会保留大写

我正在尝试删除重复值的整个行。 如果列“E”中的值在两行中是相同的,我想要删除所有与该值重复的行。

其他字段可能是或不是重复的那一行,可能有多达十个重复,总行数很大(#rows> 4000) 。 这只是大macros的一部分,所以我不能使用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”也不允许“删除”保持大写。 每次我点击,都会回到小写。

有谁知道更快或至lessfunction的方式来删除VBA中的这些重复的行?

Selection (= Application.Selection )仅被声明为Object因为它可以接受各种对象(范围,形状对象,图表等)。 因此,intellisense不能正常工作,只有在执行过程中才能确定.Delete是一种有效的方法。

尝试

 Sheets("Hours Of Interest").Rows(j).Delete Shift:=xlUp 

如果在代码中使用Sheets(…)。Range,那么不应该懒惰,也不要使用Range或者Rows或者Cells如果没有明确的引用,你可能会在不同的工作表中删除。

而且,如果从上到下删除行,每次删除都会更改以下行的行号。 所以你应该删除回头

 for i = [..maximum..] to 0 step -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 

如果内存服务的话,这比循环更快。