[英]Is is possible to set a large set of constraints for the Solver in Excel using named ranges?
所以,我有 50 個具有最小值和最大值的變量。
我想將這些設置為約束。
50 個變量位於單元格 A1 到 A50 中
最大約束在 B1 到 B50 中,最小約束在 C1 到 C50 中。
我可以將 A1:A50 A、B1:B50 B 和 C1:C50 命名為 C,然后按如下方式設置約束:
SolverAdd cellRef:="A", relation:=1, formulaText:="B"
和
SolverAdd cellRef:="A", relation:=3, formulaText:="C"
而不是 go 的 100 行:
SolverAdd cellRef:=range("A1)", relation:=1, formulaText:=Range("B1")
SolverAdd cellRef:=Range("A1"), relation:=3, formulaText:=Range("C1")
...
SolverAdd cellRef:=range("A25)", relation:=1, formulaText:=Range("B25")
SolverAdd cellRef:=Range("A25"), relation:=3, formulaText:=Range("C25")
...
等等?
您可以使用命名范圍,實際上這是提高可讀性的好主意。 "A","B","C"
本身不是有效名稱,但像"A_"
這樣的名稱是(盡管在您的 model 中有意義的名稱,例如"Purchase"
可能更好)。 要使用命名范圍,請使用如下語法(類似於您建議的語法):
SolverAdd CellRef:=Range("A_"), Relation:=1, FormulaText:="B_"
SolverAdd CellRef:=Range("A_"), Relation:=3, FormulaText:="C_"
這應該按預期工作。
這是一個完整的示例: A_
是A1:A50
的名稱, B_
是B1:B50
的名稱, C_
是C1:C50
的名稱。 我使用A51
作為目標 function,它只是A_
的總和。 我將A_
初始化為全0
,將B_
初始化為全10
,將C_
初始化為全1
。 然后我運行以下代碼:
Sub Test()
SolverOk SetCell:="$A$51", MaxMinVal:=1, ByChange:="A_", Engine:=2
SolverAdd CellRef:=Range("A_"), Relation:=1, FormulaText:="B_"
SolverAdd CellRef:=Range("A_"), Relation:=3, FormulaText:="C_"
SolverSolve True
End Sub
運行代碼后, A_
包含所有10
,如預期的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.