簡體   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