首页 > 解决方案 > 加速计算

问题描述

有了大约 20K 的观察结果,以下代码需要大约 7.5 秒才能运行

'Remember time when macro starts
StartTime = Timer
For i = 2 To UBound(avTransposed, 2)
    For J = 1 To UBound(avTransposed, 1)
        k = IIf(J = 1, k + 1, k)
        '                    If J = 1 Then k = k + 1
        ReDim Preserve TrueUsedRangeArray(1 To Dim2, 1 To k)
        TrueUsedRangeArray(J, k) = avTransposed(J, i)
    Next
Next
'Determine how many seconds code took to run
SecondsElapsed = Round(Timer - StartTime, 2)

如果没有 k = IIf(J = 1, k + 1, k)行(或 If J = 1 Then k = k + 1),只需不到一秒!

任何想法?

标签: vbavb6

解决方案


ReDim Preserve 可能正在扼杀性能。每次使用时,它都会创建一个新数组并将现有数组复制进去。

您可以预先计算 TrueUsedRangeArray 的大小,如下所示

ReDim TrueUsedRangeArray(1 To Ubound(avTransposed, 2), 1 To Ubound(avTransposed, 1))

推荐阅读