首页 > 解决方案 > 如果某些行大于 0 对于非常大的工作表,Excel VBA 宏将删除行

问题描述

我对创建宏仍然很陌生,而且我很难找到一个可以删除电子表格的整行数据的宏,该电子表格的大小可能会有所不同,但通常约为 100k 行。

条件是如果一个单元格(在本例中为“AN”行中的任何内容)大于 0,则删除整行。

我目前正在尝试使用类似下面的内容,但由于电子表格的大小,Excel 似乎不喜欢该代码,因为它永远不会完成。

    last = Cells(Rows.Count, "AN").End(xlUp).Row
            For i = last To 2 Step -1
                If (Cells(i, "AN").Value) > 0 Then
                Cells(i, "AN").EntireRow.Delete
        End If
    Next i

是否有不同的方法来编写代码,这样它就不会对尝试处理 100k 行数据造成太大压力?

谢谢!

标签: excelvbadelete-row

解决方案


你可以试试这个来节省计算能力。它会关闭宏运行时不需要的某些功能,然后重新打开它们。有更复杂的方法可以检查设置并保存它们并在之后恢复它们,但这些通常是基础知识。

Private Sub TurnOffFunctions()

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

End Sub

Private Sub TurnOnFunctions()

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

End Sub

Sub DeleteRows()

Call TurnOnFunctions

    last = Cells(Rows.Count, "AN").End(xlUp).Row
            For i = last To 2 Step -1
                If (Cells(i, "AN").Value) > 0 Then
                Cells(i, "AN").EntireRow.Delete
        End If
    Next i

Call TurnOffFunctions

End Sub

推荐阅读