繁体   English   中英

Excel Solver VBA不会让一个单元格受到两个约束(min和max)的限制

[英]Excel Solver VBA won't let one cell be bounded by two constraints (min and max)

我试图解决一个优化问题,其中一个输入变量必须由最小和最大约束限制。 因为我最后没有运行SolverReset,所以我可以告诉Solver忽略了第三个约束($ F $ 5 <= 1)。 我也可以说,因为有时它会给我一个答案,其中$ F $ 5> 1。

当我手动使用Solver时,我可以添加第三个约束。 我已经尝试录制宏以查看我遗失的内容,但我仍然难过。 我正在运行Excel 2007.有什么想法吗? 谢谢,

Public Sub SEDMSolver()

SolverReset
SolverAdd CellRef:="$F$5", Relation:=3, FormulaText:="0.1"
SolverAdd CellRef:="$F$4", Relation:=3, FormulaText:="0"
SolverAdd CellRef:="$F$5", Relation:=1, FormulaText:="1"
SolverOk SetCell:="$G$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$F$4:$F$5"
SolverSolve userFinish:=True

End Sub

解决者可能有点不稳定。 尝试将MaxMinVal = 2行设置在第一行之上。 当我运行求解器宏时,我总是必须将其设置在约束之上。 偶尔它会抛出错误。

我试图复制你的问题(使用excel 2010),但它对我有用。 随着MxMinVal的开头和结尾。 你可以尝试重新启动你的机器并擅长,看看问题是否仍然存在。 但是你的代码对我有用,所有三个约束都会加载。

我对你的代码的另一个一般建议是添加:

Application.Calculation = xlAutomatic  

这会将计算变为自动。 我在运行涉及求解器的更复杂的宏时关闭了它。

将一些单元格(例如H9)设置为1并在代码中使用对该单元格的引用。 SolverAdd CellRef:=“$ F $ 5”,关系:= 1,FormulaText:=“$ H $ 9”

根据我使用求解器并尝试使用VBA自动化它的经验,最好的解决方案是不自动化Excel的智能,而是编写自己的迭代来解决目标问题。 例如

 For j = 1 To 100
 result = someCalculation
        If result > minConstraint Then
           result = j - 1
           Exit For
        Else
        End If
 Next j

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM