【发布时间】:2013-03-25 16:40:27
【问题描述】:
我正在尝试使用 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
欢迎任何建议!
【问题讨论】:
-
代码对我来说看起来不错。它似乎以相同的方式迭代非 VBA 与 VBA?也许尝试在
SolverOK之前添加CellRef? -
也许尝试只使用
FormulaText:=1? (没有双引号)我提到它是因为code on MSDN 不使用引号。 -
谢谢。删除双引号确实有帮助(即它保持在 10 以下),但是它现在忽略了 "$O$10:$R$10" 应该等于 0。所以这两个约束都被忽略了
-
它似乎可以在非 VBA 中工作
-
重启 Excel 好像解决了....
标签: excel vba optimization constraints solver