VBA优秀,无需循环即可提高性能

时间:2017-01-18 16:48:47

标签: excel vba performance

我有两个相同的工作表,我想要获取多个列中相同的行(工作表总是63列,504行并且增加),我使用两个for循环来增加一行中的行然后将另一行中的所有行与该行进行比较,然后再次增加该行,并将另一行与该行ect进行比较。直到最后一行,然后是一个if循环,看看它们是否符合我的条件。问题是它需要花费太多时间(大约8分钟),我试图使用查找功能,但它失败了,因为它只能占用一个值。我添加了错误的screenupdating,计算和启用事件,甚至将状态栏更改为非常基本的以提高性能,但没有给我提供我想要的结果。

如何以任何可能的方式提高性能,新功能或其他任何方式?

PS有时一些条件并不重要,它取决于某些细胞的真实值或面值。

{{1}}

1 个答案:

答案 0 :(得分:1)

您是否尝试过添加

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False

代码的开头,

Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True

在代码的最后?

这将关闭屏幕更新,事件和警报,从而加快运行时间。

此外,如果您决定采用该路线,则加载和卸载数组是最快的方法。

加载数组的示例:

Dim arr() As Variant ' let brackets empty, not Dim arr(1) As Variant !

For Each a In Range.Cells
    ' change / adjust the size of array
    ReDim Preserve arr(1 To UBound(arr) + 1) As Variant

    ' add value on the end of the array
    arr(UBound(arr)) = a.Value
Next

迭代数组以提取数据的示例:

For Each element In arr 'Each array element
    do_something (element)
Next element