优化包含很多“ for”和“ if”的慢速代码

时间:2019-01-31 11:06:44

标签: excel vba

我有三个主要工作表:“输入”,“变量”和“结果”。工作表“输入”具有一个包含150个单元格的列表,用户可以进行输入,工作表“变量”具有一个包含3万多个点的列表,“结果”是代码的结果。

代码从工作表“输入”中获取一个点,在“变量”工作表中搜索该点,从该工作表中获取一堆信息,然后将其粘贴到“结果”工作表中。但是,该过程确实很慢,需要150至7分钟才能找到150个输入。有什么方法可以使它更快,或者至少有一半的时间?

下面是代码的简化版本,由于“输入”部分中存在很多条件,实际代码至少有5个“ for”和4个“ if”

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim tag As String
Dim var As String
Dim input As String
Dim i As Integer
Dim j As Integer


Set ws1 = Worksheets("inputs")
Set ws2 = Worksheets("variable")
Set ws3 = Worksheets("result")

For i = 2 To ws2.Range("C" & Rows.count).End(xlUp).Offset(1).Row
    For j = b To ws2.Range("C" & Rows.count).End(xlUp).Offset(1).Row
        var = ws2.Cells(j, 4)
        input = ws1.Cells(i, 2), 12, 40)
        If var = specs

           DO STAFF HERE

        End If
    Next j
Next i


Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

1 个答案:

答案 0 :(得分:0)

您应该尝试将遍历所述数组的内容保存到数组中!似乎总是可以提高效率,但是就O(n2)以及其他所有方面而言,循环中的循环永远都很棒!

dist
相关问题