excel - 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
解决方案
这是新 VBA 程序员的常见问题。VBA 在循环范围时非常慢。每次从范围中读取值以及将值写入范围时都需要比预期更多的处理时间。
但是,将大范围读入 VBA 中的数组变量仅计为一次读取操作,循环遍历 VBA 中的数组非常快,将大数组写回 Excel 中的范围也仅计为一次写入操作。进行此更改可能会导致您的代码需要大约 1 到 2 秒才能运行。
有很多网站非常详细地介绍了如何将一系列值读入数组变量并在 VBA 中进行处理,然后再将结果写回 Excel。谷歌:“VBA 循环数组”
几个很好的参考是:
推荐阅读
- c++ - 为什么 std::isgraph 在 std::use_facet 中抛出异常?
- ios - 保存 UITableView 的用户输入数据
- scala - 未正确推断多折叠返回类型
- python - 如何将 __len__ 添加到其数据类型定义中没有 __len__ 的对象?
- json - 如何将紧凑的 Json 转换为漂亮的打印代号一
- c# - Xamarin - SignalR 挂在连接上
- php - Laravel:第 342 行的非法字符串偏移“文件”,文件 Illuminate/Mail/Mailable.php
- jsonpath - How to concatenate constant string with jsonpath
- javascript - How to keep cookies values saved in angular 2
- three.js - How to make camera update on zoom