[英]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.