Excel VBA - 更改公式值
问题描述:
我需要制作一个宏,它可以更改3个单元格中的值,运行求解器以适应不断变化的约束,然后将求解值粘贴到列中。重复。Excel VBA - 更改公式值
在单元格L78,79和81中,我分别参考了列L,R和P。
这里基本上是我在做什么,每次我更新值:
L78 = **L4**,
L79 = **R4**,
L81 = **P4**,
Run Solver
Objective: $M$73
By changing variable: $L$80
Constraint: $M$73=**M4**
Solve
Copy $M$73
Paste **N4**
我会再增加在所有的值** 1行和重复。
第一次在这里,所以我道歉任何可怜的格式。
丹
答
所以,我设法想出了一些基本的VBA,做到了这一点。因为它使用的是复制和粘贴(lol),所以它并不完美,但它适用于我的目的,即运行二项期权定价模型并收集几百个选项的隐含波动率。
代码是:
Sub Macro1()
Worksheets("Filtered Puts").Activate
RowCount = 3
Do While Not IsEmpty(Worksheets("Filtered Puts").Range("H" & RowCount))
Range("L" & RowCount).Select
Selection.Copy
Range("L78").Select
ActiveSheet.Paste
Range("R" & RowCount).Select
Selection.Copy
Range("L79").Select
ActiveSheet.Paste
Range("P" & RowCount).Select
Selection.Copy
Range("L81").Select
ActiveSheet.Paste
Range("O73").Select
SolverReset
SolverOptions precision:=0.001
SolverOk SetCell:="$M$117", _
MaxMinVal:=1, _
ValueOf:=0, _
ByChange:="$L$80"
SolverAdd CellRef:=Range("M" & RowCount), _
Relation:=2, _
FormulaText:="$M$117"
SolverSolve userFinish:=True
SolverFinish keepFinal:=1
Range("$L$80").Select
Selection.Copy
Range("N" & RowCount).Select
ActiveSheet.Paste
RowCount = RowCount + 1
Loop
End Sub
您是否尝试录制宏,看到它做什么? –
我有,它工作正常,但我不知道如何使它每次更新行值。因为它会一遍又一遍地复制相同的单元格。 –
不错,你已经成功完成了这项工作。稍后,您将能够改进您的代码,例如通过不使用选择或激活,而是直接引用。 一个旁注,没有看到你的问题,它可能可以使用更优雅的矩阵代数来解决它。我在本科生论文中学习了VBA求解器,仅仅在第一天在我的主人学习中,我所需要的就是正确的数学(一旦你意识到超级简单)。 –