首页 > 解决方案 > VBA 脚本运行缓慢

问题描述

我是 VBA 的新手。我需要通过几个工作表(循环)运行代码。然而,简单地填写一列大约需要 10 分钟。有很多行,所以代码需要一些时间是有道理的,但不应该超过 3 分钟。

Sub Stocks():

    'Add columns where we will calculate the values
    For Each ws In Worksheets

      ws.Cells(1, 9).Value = "Ticker"
      ws.Cells(1, 10).Value = "Yearly Change"
      ws.Cells(1, 11).Value = "Percentage Change"
      ws.Cells(1, 12).Value = "Total Stock Volume"


    'Create a loop to search the next different value on column A and print it on Column I

    Dim ticker_row As Double
    ticker_row = 2

    LastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To LastRow

        If ws.Cells(i + 1, 1).Value <> Cells(i, 1).Value Then

        ticker_symbol = ws.Cells(i, 1).Value
        ws.Range("I" & ticker_row).Value = ticker_symbol
        ticker_row = ticker_row + 1

        End If

    Next i

    Next ws

End Sub

标签: excelvbaloops

解决方案


这是新 VBA 程序员的常见问题。VBA 在循环范围时非常慢。每次从范围中读取值以及将值写入范围时都需要比预期更多的处理时间。

但是,将大范围读入 VBA 中的数组变量仅计为一次读取操作,循环遍历 VBA 中的数组非常快,将大数组写回 Excel 中的范围也仅计为一次写入操作。进行此更改可能会导致您的代码需要大约 1 到 2 秒才能运行。

有很多网站非常详细地介绍了如何将一系列值读入数组变量并在 VBA 中进行处理,然后再将结果写回 Excel。谷歌:“VBA 循环数组”

几个很好的参考是:

http://www.cpearson.com/excel/ArraysAndRanges.aspx

https://excelmacromastery.com/excel-vba-array/


推荐阅读