vba - 性能优化

标签 vba performance excel optimization

我的这段代码占用了大约 90% 的运行时间。

大约有 8000 行,信息存储在 A 列中。这段代码将这些信息拆分到其他列中。
运行大约需要 15 分钟( :O )。
关于如何提高性能的任何建议?

For i = 2 To Row_Number ' Loop for each row

    If InStr(Cells(i, 1), "//") = 0 Then ' This means that if // appears somewhere in the text we delete all the rows (including this one) (see Else :) and stop the loop
        j = 1
        Do Until Mid(Cells(i, 1), j, 1) = ";"
            j = j + 1
        Loop
        LongVIN = Mid(Cells(i, 1), 1, j - 1)
        k = j
        j = j + 1
        Do Until Mid(Cells(i, 1), j, 1) = ";"
            j = j + 1
        Loop
        Cells(i, 3) = Mid(Cells(i, 1), k + 1, j - k - 1) ' Model
        k = j
        j = j + 1
        Do Until Mid(Cells(i, 1), j, 1) = ";"
            j = j + 1
        Loop
        Cells(i, 4) = Mid(Cells(i, 1), k + 1, j - k - 1) ' Dealer
        k = j
        j = j + 1
        Do Until Mid(Cells(i, 1), j, 1) = ";"
            j = j + 1
        Loop

        k = j
        j = j + 1
        Do Until Mid(Cells(i, 1), j, 1) = ";"
            j = j + 1
        Loop
        Cells(i, 6) = Mid(Cells(i, 1), k + 1, j - k - 1) ' Region

        k = j
        j = j + 1
        Do Until Mid(Cells(i, 1), j, 1) = ";"
            j = j + 1
        Loop
        Cells(i, 7) = CDate(Mid(Cells(i, 1), k + 1, j - k - 1)) ' Retail Date
        k = j

        Cells(i, 5) = Mid(Cells(i, 1), k + 1, Len(Cells(i, 1)) - k) '(Len - (k+1) +1) Dealer Name

        Cells(i, 1) = Mid(LongVIN, 1, 10)
        Cells(i, 2) = Mid(LongVIN, 11, 7)

    Else:
        Range("A" & i & ":A" & Row_Number).Delete 'ClearContents
        Exit For

    End If

Next i

最佳答案

通过将数据存储在数组中、对数组进行操作以及将数据存储回电子表格,您应该会看到性能的显着提升。

就像是:

Dim data As Variant
Dim result As Variant

data = Range(Cells(2, 1), Cells(Row_Number, 1))
Redim result (1 To Row_Number, 1 To 7) As Variant

现在而不是从 Cells(i, 1) 读取,您从 data(i, 1) 中读取而不是写信给 Cells(i, n)你写信给 result(i, n) .

在您的代码末尾:
Range(Cells(2, 1), Cells(Row_Number, 7)) = result

关于vba - 性能优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43887503/

相关文章:

windows - Excel VBA - 是否有 TextChanging/TextChanged 或类似事件?或者如何在不使用 Enter 的情况下移动选择?

excel - 在 VBA for Mac 中写入具有长名称的文件

data-structures - 无缓存数据结构和动态语言——有效吗?

excel - 将 Excel 文件发送给使用 Chrome 和 IE 但不使用 firefox 的用户(获取没有扩展名的文件)

c# - 如何使用c#在excel中创建点图、折线图?

excel - 在用户窗体中使用点模式

Excel 2007 - 公式更改为 #REF

performance - 可以在低优先级线程/进程中创建 Oracle 索引吗?

c# - Cassandra 插入性能 c#

vba - 根据分隔符剪切字符串