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行和重复。

第一次在这里,所以我道歉任何可怜的格式。

+0

您是否尝试录制宏,看到它做什么? –

+0

我有,它工作正常,但我不知道如何使它每次更新行值。因为它会一遍又一遍地复制相同的单元格。 –

+0

不错,你已经成功完成了这项工作。稍后,您将能够改进您的代码,例如通过不使用选择或激活,而是直接引用。 一个旁注,没有看到你的问题,它可能可以使用更优雅的矩阵代数来解决它。我在本科生论文中学习了VBA求解器,仅仅在第一天在我的主人学习中,我所需要的就是正确的数学(一旦你意识到超级简单)。 –

所以,我设法想出了一些基本的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