【问题标题】:Removing Rows - Code Too Slow删除行 - 代码太慢
【发布时间】:2017-10-17 17:00:42
【问题描述】:

我有以下内容,用于删除 DX 列中的名称不是指定名称的所有数据行。该代码将对所有行进行排序并删除不包含该特定名称的每一行。问题是,速度太慢了。 有什么想法吗?

 Sub DeleteNonName()


 Dim Firstrow As Long
 Dim Lastrow As Long
 Dim Lrow As Long
 Dim CalcMode As Long
 Dim ViewMode As Long

 With Application
     CalcMode = .Calculation
     .Calculation = xlCalculationManual
     .ScreenUpdating = False
 End With

 With ActiveSheet
     .Select
     ViewMode = ActiveWindow.View
     ActiveWindow.View = xlNormalView
     .DisplayPageBreaks = False
    Firstrow = 2
     Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row

     For Lrow = Lastrow To Firstrow Step -1
         With .Cells(Lrow, "DX")
             If Not IsError(.Value) Then
                 If InStr(.Value, "Name") = 0 Then .EntireRow.Delete
             End If
         End With
      Next Lrow
     End With

 ActiveWindow.View = ViewMode
 With Application
     .ScreenUpdating = True
     .Calculation = CalcMode
 End With
End Sub

【问题讨论】:

  • 请参考this,代码中最耗时的部分是删除任务。所以也请阅读Excel VBA performance issues comparing row to column deleteImproving a Loop to delete rows in excel faster。所以你应该在你的代码上只做一次删除任务,这是最快的方法。
  • 这个问题更适合 CodeReview。在那里,您将获得有关需要优化的代码的帮助。
  • @ScottCraner 是的,除了它总是相同的答案 - 退出使用 Select,不要迭代 Range,改用数组;找出您要删除的行,将它们合并到一个符号Range,然后在一次操作中删除该合并范围。总工作表读取:1。总工作表写入:1。
  • @Mat'sMug 这可能是并且不可避免地是正确的,但这仍然不能让这个网站成为一个合适的问题。事实上,它太宽泛了。
  • > Sub DeleteNotNAME() > With Range("X2", Cells(Rows.Count, "X").End(xlUp)) > If ActiveSheet.FilterMode Then .AutoFilter > .AutoFilter Field:=128, Criteria1:="NAME" > On Error Resume Next > .SpecialCells(xlVisible).EntireRow.Delete > On Error GoTo 0 > If ActiveSheet .FilterMode 然后 .AutoFilter > End With > End Sub`

标签: vba excel


【解决方案1】:

子删除名称() 使用 ActiveSheet .AutoFilterMode = False 使用 Range("DX1", Range("DX" & Rows.Count).End(xlUp)) .AutoFilter 1, "名称" 出错时继续下一步 .Offset(1).SpecialCells(12).EntireRow.Delete 结束于 .AutoFilterMode = False 结束于 选择.自动筛选 结束子

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2017-07-01
    相关资源
    最近更新 更多