VBA新手。搜索互联网,无法提出解决方案(但我在这个过程中学到了很多东西)。
我正在运行解决方案来解决一个收入数字,这个数字会给定一定的利润,给定一定的费用。我已经完成所有设置和Sub将正常执行此任务一个月。但是,我试图将其应用于12列(12个月)。然后循环下行19行。在这12列中运行求解器,依此类推6次。
以下是代码:
Sub Monthly()
SolverReset
SolverAdd CellRef:="$d$40", Relation:=2, FormulaText:="$d$41"
SolverOk SetCell:="$d$40", MaxMinVal:=1, ValueOf:=0, ByChange:="$d$24", Engine _
:=1, EngineDesc:="GRG Nonlinear"
SolverSolve True
SolverReset
SolverAdd CellRef:="$e$40", Relation:=2, FormulaText:="$e$41"
SolverOk SetCell:="$e$40", MaxMinVal:=1, ValueOf:=0, ByChange:="$e$24", Engine _
:=1, EngineDesc:="GRG Nonlinear"
SolverSolve True
这是一个让我在1月和2月的例子。希望它能够运行剩余的10个月(无需复制和粘贴10次并手动输入F-O列的单元格坐标)。然后下面的代码用于下行19行:
SolverReset
SolverAdd CellRef:="$d$59", Relation:=2, FormulaText:="$d$60"
SolverOk SetCell:="$d$59", MaxMinVal:=1, ValueOf:=0, ByChange:="$d$43", Engine _
:=1, EngineDesc:="GRG Nonlinear"
SolverSolve True
End Sub
而且,我希望这可以跨越12列并逐步减少19行再次进行4次。因此,最终结果是求解器在12列中运行6次,总共72次。我宁愿不多次输入那些单元格坐标,而且可能会对我的CPU造成负担。谢谢!
更新:
我现在得到一个错误,似乎没有任何理由。这件事情很棒。
Sub MonthlySolve1a()
Dim c As Range
Set c = ActiveSheet.Range("D40")
MonthlySolve1b c
End Sub
'solve 12 months
Sub MonthlySolve1b(c As Range)
Dim m As Long
For m = 1 To 12
SolverReset
SolverAdd CellRef:=c.Address(), Relation:=2, FormulaText:=c.Offset(1, 0).Address()
SolverOk SetCell:=c.Address(), MaxMinVal:=1, ValueOf:=0, _
ByChange:=c.Offset(-16, 0).Address(), Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve True
Set c = c.Offset(0, 1)
Next m
End Sub
我可能在我的工作表中做了一些愚蠢的事情搞砸了,但任何见解都会非常感激。谢谢!
答案 0 :(得分:2)
您可以使用循环在每个月运行求解器:
Sub Tester()
Dim c As Range
Set c = ActiveSheet.Range("D40")
Monthly c
End Sub
'solve 12 months
Sub Monthly(c As Range)
Dim m As Long
For m = 1 To 12
SolverReset
SolverAdd CellRef:=c.Address(), Relation:=2, FormulaText:=c.Offset(1, 0).Address()
SolverOk SetCell:=c.Address(), MaxMinVal:=1, ValueOf:=0, _
ByChange:=c.Offset(-16, 0).Address(), Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve True
Set c = c.Offset(0, 1)
Next m
End Sub