【发布时间】:2021-02-28 10:58:04
【问题描述】:
我正在财务模型中运行模拟。对于每次模拟,我都会模拟一组变量,并将结果作为硬编码值存储在我的 Excel 工作簿中。
我想加快我的代码速度,并且已经阅读到写入工作簿是一个缓慢的过程。因此,我希望将每个模拟的结果变量存储在一个数组中,然后将数组写入最后的工作簿。
我可以用一个新循环填充行的每个单元格,但我相信这会使代码变慢。我浏览了许多帖子,但没有找到任何涵盖我的查询的帖子。
我想要这样的东西,但我不知道如何将一行数据写入数组。
Dim nSimulations As Integer
Dim nOutput_Variables As Integer
Dim myArray as Variant
'Assign Values
nSimulations = Range("QRA_Simulations").Value 'This will vary, but let's assume 100 simulations
nOutput_Variables = Range("QRA_Output_Copy").Column '25 output values
Redim myArray(nSimulations, nOutput_Variables) 'dimension array to have 100 rows and 25 columns
'Run loop
For iSim = 1 To nSimulations
'Set simulation variables.
Range("QRA_OPEX").Value = Range("QRA_OPEX_Copy").Value
Range("QRA_CAPEX").Value = Range("QRA_CAPEX_Copy").Value
'Store simulation results as a row in my array
myArray(iSim,0) = Range("QRA_Output_Copy").Value 'This does not work. The QRA_Output_Copy is a range spanning 1 row and 25 columns, holding 25 values.
Next iSim
Range("Output").Value = myArray 'This just returns #N/A. The output range is 100 rows and 25 colums
【问题讨论】:
-
旁注 - 由于您对速度发表了评论并且正在运行金融模拟,我建议您查看 R 或 Python。根据经验,它们对于您尝试做的工作类型要“快速”得多,并且更容易扩展。我喜欢 excel 和 VBA,但您需要承认它在未来的局限性,尤其是对于您想要实现的目标。如果您只是进行原型设计,那么是的,VBA 就足够了,但是当您尝试扩展到更大的数据集时要小心。
-
我很欣赏你的观点,我更愿意自己搬到 R。但是,我不是唯一使用财务模型的人,其他财务分析师不熟悉编码,所以我坚持使用 excel。
-
如果您描述了
QRA_Output_copy范围的范围和最小样本内容以及您想要的输出形式,这将有助于提供帮助。 @JacobKorenBrekke -
在评论中更新了。
-
@T.M.正是我要找的,谢谢!也感谢小代码优化。