我正在尝试使用Excel VBA中的求解器通过更改其他3个单元来设置单元格。但是,三个单元格不会因我选择的值而改变(我为每个colomn添加了一个求解器,使其更大,更小于特定值),它似乎解算器无法读取我的内容已经给了它。
我需要知道如何让它读取三个常量并根据它们进行更改。
Sub solver()
For i = 5 To 48
SolverReset
objstring = "$I$" & i
SolverOk SetCell:=Range(objstring), MaxMinVal:=2, ValueOf:=0, ByChange:=Range("C5:E7")
SolverAdd CellRef:="$C$5:$C$48", Relation:=1, FormulaText:=934000
SolverAdd CellRef:="$C$5:$C$48", Relation:=3, FormulaText:=953000
SolverAdd CellRef:=Range("$D$" & i), Relation:=1, FormulaText:="$B$13"
SolverAdd CellRef:=Range("$D$" & i), Relation:=3, FormulaText:="$B$14"
SolverAdd CellRef:=Range("$E$" & i), Relation:=1, FormulaText:="$B$15"
SolverAdd CellRef:=Range("$E$" & i), Relation:=3, FormulaText:="$B$16"
SolverSolve userfinish:=True
Next i
End Sub
答案 0 :(得分:0)
我认为您的设置还有其他问题,但是如果没有看到屏幕上的行/列,或者知道公式 - 特别是第I列,很难说清楚。
但是,对于您提出的问题:
SetCell
和CellRef
的范围会更简单。使用字符串。SolverOK
语句中,您应明确指定Engine
。SolverOK
语句中,MaxMinVal:=2
是最小化的规范。因此,ValueOf
将被忽略,可以省略。SolverOK
,ByChange:="C5:E7"
,我怀疑您需要ByChange:="C5:E5"
,并希望行与计数器i
一起增加。$C$5
和$D$5
的方式约束$E$5
。$B$13
包含值5000,这是Pi的最小值。单元格$B$14
包含值8000,这是您的最大值。在SolverAdd
中,Relation:=1
相当于“小于或等于”或“< =”。 Relation:=3
相当于“> =”。您想要“< =”您的最大值,并且“> =”您的最小值...您已向后指定约束。全部,如下图所示......
Sub solver()
For i = 5 To 48
SolverReset
SolverOk SetCell:="$I$" & i, MaxMinVal:=2, ByChange:="$C$" & i & ":$E$" & i, Engine:=1
SolverAdd CellRef:="$C$" & i, Relation:=1, FormulaText:="$B$18"
SolverAdd CellRef:="$C$" & i, Relation:=3, FormulaText:="$B$17"
SolverAdd CellRef:="$D$" & i, Relation:=1, FormulaText:="$B$14"
SolverAdd CellRef:="$D$" & i, Relation:=3, FormulaText:="$B$13"
SolverAdd CellRef:="$E$" & i, Relation:=1, FormulaText:="$B$16"
SolverAdd CellRef:="$E$" & i, Relation:=3, FormulaText:="$B$15"
SolverSolve userfinish:=True
Next i
End Sub
其他潜在问题......