VBA中的求解器不添加整数约束

时间:2014-04-09 14:56:54

标签: excel vba excel-vba integer constraints

我正在使用VBA代码来运行求解器。以下是我的代码。我希望单元格C87:K93是整数,但是,约束不会被添加到Solver中,所以我得到的值都是小数。我可以知道如何更改代码以便考虑整数约束吗?

Sub Solve()
   SolverReset
   SolverAdd CellRef:="$C$87:$K$93", Relation:=4, FormulaText:="integer"
   SolverAdd CellRef:="$C$87:$K$93", Relation:=1, FormulaText:="$C$48:$K$54"
   SolverAdd CellRef:="$L$87:$L$93", Relation:=1, FormulaText:="$M$87:$M$93"
   SolverAdd CellRef:="$C$87:$K$93", Relation:=3, FormulaText:="0"

   SolverOk SetCell:="$N$95", MaxMinVal:=1, ValueOf:="0", ByChange:="$C$87:$K$93"
   SolverSolve UserFinish:=True
End Sub

下面是运行代码后Solver图片的链接,整数约束不会出现

Picture

非常感谢你的帮助

1 个答案:

答案 0 :(得分:1)

我最近遇到了同样的问题。即使没有FormulaText在整数约束的末尾。

这应该有效:

Sub Solve()
   SolverReset
   SolverOk SetCell:="$N$95", MaxMinVal:=1, ValueOf:="0", ByChange:="$C$87:$K$93"
   SolverAdd CellRef:="$C$87:$K$93", Relation:=4
   SolverAdd CellRef:="$C$87:$K$93", Relation:=1, FormulaText:="$C$48:$K$54"
   SolverAdd CellRef:="$L$87:$L$93", Relation:=1, FormulaText:="$M$87:$M$93"
   SolverAdd CellRef:="$C$87:$K$93", Relation:=3, FormulaText:="0"

   SolverSolve UserFinish:=True
End Sub

将整数约束(SolverAdd)应用于不属于决策变量(ByChange)的单元格时,解算器会提示:

  

“整数约束单元格引用必须仅包含可变单元格。”

在您的示例中并非如此,但设置目标函数仍然起作用。我假设如果在添加SolverOk之前添加整数约束,解算器还不知道决策变量(ByChange),因此不包括整数约束。