在VBA中使用求解器求解编码方程

时间:2019-02-11 08:58:59

标签: excel vba

我正在编写在excel中使用求解器的VBA代码,以最大程度地减少参考值与通过公式预测的值之间的误差。但是,我想将方程式保留在VBA代码中,而不是将其添加为excel中的列。这是为了使用密码保护的宏来保护我的方程式。 代码如下:

单元格B2和C2是变量,求解器将对其进行更改以使其达到最小值。 F9和G9单元格是参考值。

Range("B2").Select
ActiveCell.FormulaR1C1 = "1"
Range("C2").Select
ActiveCell.FormulaR1C1 = "1"

SolverReset

SolverAdd CellRef:="$B$2", Relation:=3, FormulaText:="0.3"
SolverAdd CellRef:="$B$2", Relation:=1, FormulaText:="1.7"

SolverAdd CellRef:="$C$2", Relation:=3, FormulaText:="1"
SolverAdd CellRef:="$C$2", Relation:=1, FormulaText:="20"

value1 = 28.563041 - 0.6895786 * Range("B2").Value - 0.1685979 * 
Range("C2").Value 
value2 = 31.161328 - 0.1194945 * Range("B2").Value - 0.1156287 * 
Range("C2").Value 

error1 = (Range("$F$9").Value - value1 ) ^ 2
error2 = (Range("$G$9").Value - value2) ^ 2

error = error1 + error2
Range("J11").Value = error

SolverOk SetCell:="$J$11", MaxMinVal:=2, ValueOf:=0, ByChange:="$B$2:$C$2", _
    Engine:=1, EngineDesc:="GRG Nonlinear"

SolverSolve

问题: 变量B2和C2的初始值为1,但在求解器优化过程中未更改。 我想知道如何在求解器循环中获取变量。

0 个答案:

没有答案
相关问题