删除整行不会保持大写

时间:2014-08-21 20:57:38

标签: excel vba

我正在尝试删除具有重复值的整个行。如果列中的值为" 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中删除这些重复行的更快或最不实用的方法?

2 个答案:

答案 0 :(得分:2)

Selection(= Application.Selection)仅被声明为Object,因为它可以采用各种对象(范围,形状对象,图表等)。因此,智能感知也不起作用,只有在.Delete是有效方法时才会确定。

尝试

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

如果你在代码中使用表格(...)。范围,你绝不应该懒惰,如果没有明确的引用,你永远不要使用RangeRowsCells em>可能在不同的工作表上删除。

此外,如果从上到下删除行,则每次删除都会更改以下行的行号。 所以你应该用

删除backwars
for 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

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