【问题标题】:Setting the convergence value to a variable for the built-in solver将收敛值设置为内置求解器的变量
【发布时间】:2014-06-18 18:43:02
【问题描述】:

在创建使用求解器的程序时,我需要用户能够手动输入内置求解器使用的收敛和精度的值。我希望能够将收敛值设置为可以通过用户输入设置的单元格或变量。

这是我正在使用的求解器代码示例:

SolverReset
SolverOk SetCell:="$D$14", MaxMinVal:=2, ValueOf:=0, ByChange:="$F$2:$F$5", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:="$F$2", Relation:=1, FormulaText:="100"
SolverAdd CellRef:="$F$2", Relation:=3, FormulaText:="0.0000000001"
SolverAdd CellRef:="$F$3", Relation:=1, FormulaText:="100"
SolverAdd CellRef:="$F$3", Relation:=3, FormulaText:="-100"
SolverAdd CellRef:="$F$4", Relation:=1, FormulaText:="100"
SolverAdd CellRef:="$F$4", Relation:=3, FormulaText:="-100"
SolverAdd CellRef:="$F$5", Relation:=1, FormulaText:="10"
SolverAdd CellRef:="$F$5", Relation:=3, FormulaText:="0.0000000001"
SolverOptions MaxTime:=0, Iterations:=0, Precision:=1E-18, Convergence:= _
    1E-16, StepThru:=False, Scaling:=True, AssumeNonNeg:=True, Derivatives:= _
    1
SolverSolve True

此代码只是改变单元格 F2、F3、F4 和 F5 中的值(在我提供的范围内),以试图最小化我在 D14 中的值。

理想情况下,我希望能够将Convergence CellRef:="$B$16" 之类的内容放入其中,但这似乎不起作用。有人知道怎么做这个吗?看起来应该很简单,但我想出了一个空白。

【问题讨论】:

  • 你试过类似Convergence:= CDbl(range("B16").value2)吗?
  • 有效!您可以将此作为答案发布,以便我将您标记为正确吗?

标签: vba excel excel-2010 solver excel-2013


【解决方案1】:

Convergence,以及所有其他SolverOptions 都可以使用单元格值设置,例如Convergence:= Range("A1").value

Value2 is a little faster than Value,最好将单元格值显式转换为双倍(并捕获任何错误)。

另一种方法是将值添加为命名范围或名称。 This question 详细阐述了这些方法。名称的优点是不需要直接出现在电子表格中,这很优雅。例如,用户可以在用户表单中设置和编辑它们。

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多