繁体   English   中英

宏运行时突然变慢

[英]Macro Runtime Suddenly Slow

我有一个完全相同的代码,在先前的迭代中几乎立即运行,现在大约需要5分钟才能运行。 我编辑了代码的其他部分,但是只要我在5分钟的时间内破坏代码,它就会遍历此子代码。

Sub cleanup()

For i = 2 To 100000

'exits loop when it reaches a blank cell
If IsEmpty(Cells(i, 1)) = True Then Exit For

' formats for blanks
If Cells(i, 1) = Cells(i - 1, 1) Then
    For j = 4 To 15
        If IsEmpty(Cells(i - 1, j)) = True Then
        Cells(i - 1, j) = Cells(i, j)
        End If
    Next j
    Rows(i).Delete
    i = i - 1
End If

Next i

End Sub

我尝试禁用事件和屏幕更新等,但无法解决。 请记住,这曾经是即时运行的,并且由于这些更改,我只更改了代码中的其他功能。 不知道该怎么办。 谢谢!

**

另一个很奇怪的部分是当我再次运行宏(删除所有行之后)时,它仍然需要很长时间。 在上面的宏中,通过它的第二次输入永远不会进入第一个条件,但仍然需要很长时间。

**

Sub cleanup()

For i = Range("A" & Rows.Count).End(xlUp).Row + To 2 step -1

    If Cells(i, 1) = Cells(i - 1, 1) Then
        For j = 4 To 15
            If IsEmpty(Cells(i - 1, j)) Then Cells(i - 1, j) = Cells(i, j)
        Next j
        If CellArray Is Nothing Then
            Set CellArray = Rows(i)
        Else
            Set CellArray = Union(CellArray, Rows(i))
        End If
    End If
Next i

CellArray.Delete

End Sub

我可能会简化您的任务,但是如果您在Excel中使用内置的counta函数,我认为确定行中是否包含值将非常有效:

If Excel.WorksheetFunction.CountA(rw.EntireRow) = 0 Then
  rw.Delete
End If

当然,这将查看整个行,您可能希望将其绑定到第4至15列(或上面显示的任何内容)。

另外,我认为@ Marcucciboy2很好,我将从头开始。

如果您确实想发出嗡嗡声,则可以在范围上下文中定义它们(即1:4,5:7等),然后一次删除整个行集合。

在excel中,如果可以避免for循环,则它非常慢。 例如:我的工作我使用7000x746x3行,它的运行时间约为15分钟(i5 7300u,但是在台式机7770上运行的速度并不快。在这里可能没有什么优化之处: https ://www.ozgrid.com/VBA/SpeedingUpVBACode.htm或使用foreach。如果您使用它,您可以计算行数/列数。

LastRow = Worksheets("Sheet").Cells(Worksheets("Sheet").Rows.Count, "A").End(xlUp).Row

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM