首页 文章

删除整行不会保持大写

提问于
浏览
0

我试图删除具有重复值的整个行 . 如果列“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 回答

  • 2

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

    尝试

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

    如果你在代码中使用表格(...) . 范围,你永远不会变得懒惰,如果没有明确的引用,就不要使用 RangeRowsCells ,你可能会在另一个工作表上删除 .

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

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

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

相关问题