我正在开发一个流程,根据月度返回数据自动计算3年滚动回报。以下是产生错误的代码部分:
Set rolling_returns = Range([c41], [c41].End(xlDown))
start_no_begin = 6
start_no_end = 41
For Each calc In rolling_returns
reference_begin = "C" & start_no_begin
reference_end = "C" & start_no_end
Set calculation1 = Range(reference_begin, reference_end)
calc.Offset(0, 3) = ((WorksheetFunction.Product(calculation1)) - 1) ^ (1 / 3)
'why is this getting stopped after a certain amount of calculations??
start_no_begin = start_no_begin + 1
start_no_end = start_no_end + 1
Next
我的代码运行了175次迭代,然后我收到错误。我手动重现了计算,没有错误,所以我不认为这是一个数据问题。这可能是一个记忆问题吗?
答案 0 :(得分:0)
检查此thread - 基本上说您可以使用WorksheetFunction.Power
函数代替直接使用小数指数。
您的代码不会降低尝试获取-1的多维数据集根的风险,因为calculation1
的生成可能为零而您扣除1。
所以你的代码变成了:
calc.Offset(0, 3) = WorksheetFunction.Power(((WorksheetFunction.Product(calculation1)) - 1), 3)
我建议您查看正在发生的事情,因为您的代码已达到您正在处理的数据范围的底部。如果您在循环结束时拾取空单元格,那么WorksheetFunction.Product
函数通常会跳过这些单元格,但值得检查特定例程中发生的情况。