excel多变量规划求解:Excel规划求解方案的重复使用
excel多变量规划求解:Excel规划求解方案的重复使用crng:可变单元格区域sorng:目标区域每次都要重新设定规划求解的约束条件。这时使用VBA控制规划求解,就会很容易解决这个难题:首先区域的设置如下:
Excel中如何重复使用规划求解?
规划求解是个很好的工具,可以用来处理很多问题。
但是在实际使用过程中又会受到很多限制,
当你需要多次使用规划求解才能获得计算结果时,就会变得很麻烦,
每次都要重新设定规划求解的约束条件。
这时使用VBA控制规划求解,就会很容易解决这个难题:
首先区域的设置如下:
sorng:目标区域
crng:可变单元格区域
minrng、drng、frng:都是引用的条件区域
对应这段代码:
Set sorng = sosht.Cells(14 step 4) '设置目标单元格
Set crng = sosht.Range(Cells(10 step 5) Cells(13 step 5)) '设置可变区域
Set drng = sosht.Range(Cells(10 step 2) Cells(13 step 2)) '设置条件区域
Set frng = sosht.Cells(14 step 2) '追加的条件
Set minrng = sosht.Cells(14 step 3) '追加的条件
其次是规划求解设置:
对应的代码:
SolverOk SetCell:=sorng.Address MaxMinVal:=2 ValueOf:=0 ByChange:=crng.Address Engine:=1 EngineDesc:=GRG Nonlinear
还有对应的约束条件:
对应的代码:
SolverAdd CellRef:=sorng.Address Relation:=3 FormulaText:=0
SolverAdd CellRef:=sorng.Address Relation:=1 FormulaText:=minrng.Address
SolverAdd CellRef:=crng.Address Relation:=1 FormulaText:=drng.Address
SolverAdd CellRef:=crng.Address Relation:=4 FormulaText:=整数
在设置规划求解的方案时,一定要注意:
方案中所有的对表格的引用全部使用的地址应用rng.address
循环体最后两句也很重要:
禁止弹出窗口,保存规划结果。
'规划求解结束,不显示对话窗口
SolverSolve userfinish:=True
'保存规划求解的结果
solversave savearea:=crng.Address
'步长递增
step = step 8
本文并未讲解如何设计规划求解方案
只是通过VBA控制多次规划求解
最后贴出全部代码:
Sub solver_run()
Dim i step
Dim sosht As Worksheet
Dim sorng frng minrng As Range
Dim crng As Range
Dim drng As Range
step = 0
ActiveSheet.Select
Set sosht = ActiveSheet
For i = 1 To 7
Set sorng = sosht.Cells(14 step 4) '设置目标单元格
Set crng = sosht.Range(Cells(10 step 5) Cells(13 step 5)) '设置可变区域
Set drng = sosht.Range(Cells(10 step 2) Cells(13 step 2)) '设置条件区域
Set frng = sosht.Cells(14 step 2) '追加的条件
Set minrng = sosht.Cells(14 step 3) '追加的条件
'清除可变单元格内容
crng.ClearContents
'计算,使清除单元格的动作生效
Calculate
'设置规划求解方案
SolverReset
SolverOk SetCell:=sorng.Address MaxMinVal:=2 ValueOf:=0 ByChange:=crng.Address Engine:=1 EngineDesc:=GRG Nonlinear
SolverAdd CellRef:=sorng.Address Relation:=3 FormulaText:=0
SolverAdd CellRef:=sorng.Address Relation:=1 FormulaText:=minrng.Address
SolverAdd CellRef:=crng.Address Relation:=1 FormulaText:=drng.Address
SolverAdd CellRef:=crng.Address Relation:=4 FormulaText:=整数
'规划求解结束,不显示对话窗口
SolverSolve userfinish:=True
'保存规划求解的结果
solversave savearea:=crng.Address
'步长递增
step = step 8
Next
End Sub