【发布时间】:2017-10-30 20:53:31
【问题描述】:
朋友们,
我正在使用下面的代码来计算矩阵中两个变量 x,y(经度和纬度)数组的结果。因为公式比较复杂,需要很长时间才能得到所有的结果。谁能帮我优化代码以使其运行得更快?谢谢!
代码在两个选项卡之间运行,VBA 计算表和表 2。第一个数组从单元格 A3 开始,第二个数组从单元格 B1 开始。
Sub calculator()
Worksheets("Sheet2").Select
Dim long1 As Double
Dim lat1 As Double
Application.ScreenUpdating = False
x = 3
y = 2
While IsEmpty(Cells(x, 1)) = False
lat1 = Cells(x, 1).value
While IsEmpty(Cells(1, y)) = False
long1 = Cells(1, y).value
Worksheets("VBA Calculation Sheet").Select
Cells(28, 7) = lat1
Cells(29, 7) = long1
index = Cells(23, 7).value
Worksheets("Sheet2").Select
Cells(x, y) = index
y = y + 1
Wend
x = x + 1
y = 2
Wend
End Sub
【问题讨论】:
-
如果代码有效,那么您需要在codereview.stackexchange.com 上发布这个问题,并使用更好的标题,它对于这个论坛来说太宽泛了,但非常适合那个论坛。
-
我会阅读有关使用数组的内容。您的代码很慢,因为它不断与工作表交互。最好将数据存储在数组中,并在代码中(在内存中)进行处理。然后根据需要将最终结果输出到工作表。
-
您还需要在工作表上显示正在完成的计算。为了加快速度,您需要限制需要参考工作表的次数。应该加载一个数组,遍历该数组在代码中进行计算并加载另一个数组以进行输出。这样,您只需访问工作表 2 或 3 次。这是主要的减速以及使用
.Select。
标签: vba optimization