为大量迭代提高Excel VBA循环的速度

为大量迭代提高Excel VBA循环的速度,excel,vba,loops,time,Excel,Vba,Loops,Time,我的VBA代码目前循环5000次,在输出excel表中收集输出数据大约需要25分钟。是否有一种方法可以减少所花费的时间,例如通过改进值的复制和粘贴、在某种数组中收集输出数据等。?考虑到当我获得更多数据时,我将循环它多达10000次迭代 注意:计算是Calcs excel表中的excel公式,因为这是一个现金流量表,具有不规则的现金流量和贴现率,因此我无法通过VBA自动计算现金流量 Sub x() Dim r As Long Dim lastrow As Long Application.Sc

我的VBA代码目前循环5000次,在输出excel表中收集输出数据大约需要25分钟。是否有一种方法可以减少所花费的时间,例如通过改进值的复制和粘贴、在某种数组中收集输出数据等。?考虑到当我获得更多数据时,我将循环它多达10000次迭代

注意:计算是Calcs excel表中的excel公式,因为这是一个现金流量表,具有不规则的现金流量和贴现率,因此我无法通过VBA自动计算现金流量

Sub x()

Dim r As Long
Dim lastrow As Long

Application.ScreenUpdating = False
Application.CutCopyMode = False

With Worksheets("MCInput")
lastrow = .Cells(.Rows.Count, "B").End(xlUp).Row
MsgBox lastrow - 1 & " Trials"
End With

With Worksheets("Calcs")
    For r = 0 To (lastrow - 2)
        .Range("CASHINPUT").Value = Worksheets("MCInput").Range("TCASHRTN").Offset(r).Value
        .Range("EQINPUT").Value = Worksheets("MCInput").Range("TEQRTN").Offset(r).Value
        .Range("FIINPUT").Value = Worksheets("MCInput").Range("TFIRTN").Offset(r).Value
        .Range("Results").Calculate
        .Range("Results").Copy
        Worksheets("Output").Range("A1").Offset(1 + r, 1).PasteSpecial xlPasteValues
    Next r
End With

Application.ScreenUpdating = True
Application.CutCopyMode = True

End Sub


将其重写为使用数组,并且永远不要将
。Calculate
放入这样的循环中。复制/粘贴速度也很慢,而且它在你的循环中。。。尽管@braX已经列出了其中的一半。另外,如果5k行需要25分钟,那么可能主要的减速是计算部分,而不是在部分周围移动值,可能需要优化计算。考虑将计算设置为手动,因此不会因为每次输入改变而触发。