我正在尝试使用 Solver 找到一个简单投资组合的最大回报。在工作表中直接使用 Solver 是明智的,但是在 VBA 中设置命令时就不行了。相反(正如您从屏幕截图中看到的那样),它忽略了其中一个约束(在 T10 中计算的权重总和应该 = 1)。有趣的是,如果我将第三行改为:
SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="100"
或除“1”以外的任何其他整数。(它也可能忽略了其他约束,但我无法检查)。该表如下所示:
我的代码是:
Sub FindRange()
SolverReset
SolverOk SetCell:="$T$7", MaxMinVal:=1, ValueOf:="0", ByChange:="$O$10:$R$10"
SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="$O$10:$R$10", Relation:=3, FormulaText:="0"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Range("T9").Value = Range("T7").Value
End Sub
任何建议都非常欢迎!