excelvba中计算速度较慢

excelvba中计算速度较慢,excel,stock,vba,Excel,Stock,Vba,我目前正在计算股票投资的回报。我有大约10年的历史数据,我构建函数的方式需要很长时间才能完成这项工作。例如,我有11列和2872行来计算每天的回报 my Function Public Sub CalcROI(ByVal ColPick As Integer, ByVal ColPrint As Integer) Dim irow As Integer Dim iCol As Integer For irow = 4 To 2873 'Calc

我目前正在计算股票投资的回报。我有大约10年的历史数据,我构建函数的方式需要很长时间才能完成这项工作。例如,我有11列和2872行来计算每天的回报

my Function
     Public Sub CalcROI(ByVal ColPick As Integer, ByVal ColPrint As Integer)

     Dim irow As Integer
     Dim iCol As Integer

     For irow = 4 To 2873
    'Calculating ROI
      Cells(irow + 1, ColPrint).Value = (Cells(irow + 1, ColPick).Value - Cells(irow, ColPick).Value) / Cells(irow, ColPick).Value
      Next irow

      End Sub
该程序的实施情况令人担忧

 CalcROI ColPick:=4, ColPrint:=17
ColPick-需要从中选取值进行计算


ColPrint-在专栏中,它需要打印输出

我不知道这是否可行,只是想测试我昨天在另一个问题上看到的东西。如果您测试它,请在工作簿的副本中运行它,以防出现严重错误

更新

我已经对它进行了测试(仅使用一列大于0的随机数),它确实有效

Public Sub CalcROI(ByVal ColPick As Integer, ByVal ColPrint As Integer)
Dim rgPick As Range
Dim vaPick As Variant
Dim rgPrint As Range
Dim vaPrint As Variant
Dim Row As Integer

    Set rgPick = Range(Cells(4, ColPick), Cells(2873 + 1, ColPick))
    vaPick = rgPick.Value

    Set rgPrint = Range(Cells(4, ColPrint), Cells(2873 + 1, ColPrint))
    vaPrint = rgPrint.Value

    For Row = LBound(vaPick) To UBound(vaPick) - 1
        vaPrint(Row + 1, 1) = (vaPick(Row + 1, 1) - vaPick(Row, 1)) / vaPick(Row, 1)
    Next Row

    rgPrint = vaPrint

End Sub

我引用了。

我不知道这是否有效,只是想测试我昨天在另一个问题上看到的东西。如果您测试它,请在工作簿的副本中运行它,以防出现严重错误

更新

我已经对它进行了测试(仅使用一列大于0的随机数),它确实有效

Public Sub CalcROI(ByVal ColPick As Integer, ByVal ColPrint As Integer)
Dim rgPick As Range
Dim vaPick As Variant
Dim rgPrint As Range
Dim vaPrint As Variant
Dim Row As Integer

    Set rgPick = Range(Cells(4, ColPick), Cells(2873 + 1, ColPick))
    vaPick = rgPick.Value

    Set rgPrint = Range(Cells(4, ColPrint), Cells(2873 + 1, ColPrint))
    vaPrint = rgPrint.Value

    For Row = LBound(vaPick) To UBound(vaPick) - 1
        vaPrint(Row + 1, 1) = (vaPick(Row + 1, 1) - vaPick(Row, 1)) / vaPick(Row, 1)
    Next Row

    rgPrint = vaPrint

End Sub

我引用了。

如果您不想更改当前代码,请使用
应用程序。屏幕更新将有助于做到这一点(以及使您未来几乎所有的Excel VBA代码运行得更快)



如果您不想更改当前代码,请使用
应用程序。屏幕更新
将有助于实现这一点(并使未来几乎所有的Excel VBA代码运行得更快)



你的问题里没有问题!我想你想加快速度。您可以在计算中去掉+1,并将For参数更改为运行5到2784,但是为什么不把公式放在电子表格中呢?因为我想使用VBA菜单驱动程序动态执行操作…我基本上是在计算风险价值-历史方法,该表中的股票信息来自彭博终端…以上是VaR计算的一部分您可以加快当前代码的速度通过在开头添加
Application.screenUpdatement=false
显著提高。您的问题中没有问题!我想你想加快速度。您可以在计算中去掉+1,并将For参数更改为运行5到2784,但是为什么不把公式放在电子表格中呢?因为我想使用VBA菜单驱动程序动态执行操作…我基本上是在计算风险价值-历史方法,该表中的股票信息来自彭博终端…以上是VaR计算的一部分您可以加快当前代码的速度通过在开始处添加
Application.Screenupdating=false
,显著提高了性能。