【问题标题】:Excel VBA deleting rows based on an if statement (speed up)Excel VBA 基于 if 语句删除行(加速)
【发布时间】:2016-10-24 22:36:17
【问题描述】:

我正在根据 P 列中的值删除行。 P 列中的单元格有一个 if 语句:IF(K

如果 P 列的值为 0,则需要删除该行。 我正在使用以下宏,它可以工作但需要很长时间。 我希望能够处理大约 10000 行。

如果我能对加快此代码的速度提出一些建议,我们将不胜感激。

[我曾尝试使用这个 if 语句:IF(K

 Sub RemoveBlankRows()

   Application.ScreenUpdating = False
    'PURPOSE: Deletes any row with 0 cells located inside P
    'Reference: www.TheSpreadsheetGuru.com

   Dim rng As Range
   Dim blankrng As Range
   Dim cell As Range

   'Store blank cells inside a variable
   'On Error GoTo NoBlanksFound
Set rng = Range("P2:P30000") '.SpecialCells(xlCellTypeBlanks)
'On Error GoTo 0

For Each cell In rng
If cell.Value = 0 Then
    cell.EntireRow.Delete
    'Value = ""
End If
Next

Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • 排序呢?您能否以将0 单元格组合在一起的方式对表格/数据进行排序,然后使用0 抓取第一行和最后一行,然后删除范围?

标签: excel vba


【解决方案1】:

这会寻找 0 并避免空白:

Sub RowKiller()
    Dim rKill As Range, r As Range, rng As Range

    Set rng = Range("P2:P30000")
    Set rKill = Nothing

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    For Each r In rng
        If r.Value = 0 And r.Value <> "" Then
            If rKill Is Nothing Then
                Set rKill = r
            Else
                Set rKill = Union(rKill, r)
            End If
        End If
    Next r

    If Not rKill Is Nothing Then rKill.EntireRow.Delete

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True

End Sub

这只是演示代码。量身定制以满足您的需求。

【讨论】:

  • 非常感谢
  • 完美运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 2018-03-28
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多