【发布时间】:2014-06-21 04:26:11
【问题描述】:
我的工作簿如下所示:
Sheet1:
A B C D
1 VarName Multiplier1 Multiplier2 Multiplier3
2 Var1 0.3 0.8 0.4
3 Var2 0.4 0.9 0.1
...
100 Var100 0.2 0.2 0.7
101 Parameter1 Parameter2 Index
102 Sheet2!A2 Sheet2!B2 Complicated formulas like =SUMPRODUCT(B2:B100, C2:C100, D2:D100)+C102/B102
Sheet2:
A B C
1 Parameter1 Parameter2 FinalResult
2 100 25 Complicated formulas like =IF(Sheet1!D102<1, 1, Sheet1!D102)
Sheet3:
A B C
1 Parameter1 Parameter2 FinalResult
2 110 30 ?
3 140 40 ?
...(about 200,000 rows)
更多信息: 在 Sheet1 和 Sheet2 中,实际公式比此处显示的公式要复杂得多。在 Sheet1 中,我们从 Sheet2 的 7 个基本参数计算出 154 个中间变量,sumproduct 只是一个中间函数。在 Sheet2 中有 15 种不同的情况,具体取决于从 Sheet1 计算的参数和指数。所以基本上我不能把它们硬编码在一起,唯一的入口是在 Sheet2 中。我不会更改Sheet1和Sheet2的另一个原因是因为这是从其他公司购买的模型,我们被告知使用它的方式是在Sheet2中输入参数。
如何在 Sheet3 的 C 列中编写公式,以便计算每对 Parameter1 和 Parameter2 的结果?我尝试录制宏以复制和粘贴如下:
Sub ToEnd()
Dim i As Long
Application.ScreenUpdating = False
i = 1
While i < 200000
Worksheets("Sheet3").Range("A1:B1").Offset(i, 0).Select
Selection.Copy
Sheets("Sheet2").Select
Range("A2").Select
ActiveSheet.Paste
Range("C2").Select
Selection.Copy
Sheets("Sheet3").Select
Range("C1").Offset(i, 0).Select
Selection.PasteSpecial Paste:=xlValues
i = i + 1
Wend
End Sub
但是在 6 秒内我只得到 200 个结果,我估计一个案例的时间复杂度最多为 10^4,所以它比我预期的要慢得多。我想知道Sheet3的C2中是否可以写一些东西看起来像
=PassingParameterAndGetReturnValue(A2:B2, Sheet2!$A$2:$B$2, Sheet2!$C$2)
我可以用内循环自动填充因此更快吗?或者任何其他更好的方式来完成我的任务都会受到欢迎。
【问题讨论】:
-
您是否尝试记录类似假设分析的内容,您更改
Sheet2的参数并记录索引?