快捷搜索:  汽车  科技

excel多变量规划求解:Excel规划求解方案的重复使用

excel多变量规划求解:Excel规划求解方案的重复使用crng:可变单元格区域sorng:目标区域每次都要重新设定规划求解的约束条件。这时使用VBA控制规划求解,就会很容易解决这个难题:首先区域的设置如下:

excel多变量规划求解:Excel规划求解方案的重复使用(1)

Excel中如何重复使用规划求解?

规划求解是个很好的工具,可以用来处理很多问题。

但是在实际使用过程中又会受到很多限制,

当你需要多次使用规划求解才能获得计算结果时,就会变得很麻烦,

每次都要重新设定规划求解的约束条件。

这时使用VBA控制规划求解,就会很容易解决这个难题:

excel多变量规划求解:Excel规划求解方案的重复使用(2)


首先区域的设置如下:

sorng:目标区域

crng:可变单元格区域

minrng、drng、frng:都是引用的条件区域

excel多变量规划求解:Excel规划求解方案的重复使用(3)

对应这段代码:

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) '追加的条件


其次是规划求解设置:

excel多变量规划求解:Excel规划求解方案的重复使用(4)

对应的代码:

SolverOk SetCell:=sorng.Address MaxMinVal:=2 ValueOf:=0 ByChange:=crng.Address Engine:=1 EngineDesc:=GRG Nonlinear

还有对应的约束条件:

excel多变量规划求解:Excel规划求解方案的重复使用(5)

对应的代码:

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

猜您喜欢: