求解跨越多个列和行的VBAmacros

新的VBA。 淘汰互联网,不能拿出解决scheme(但我在这个过程中学到了很多东西)。

我正在运行解决scheme来解决一个收入数字,给我一个特定的利润率给予一定的费用。 我已经得到了所有的设置和一个小组,将正确执行这个任务一个月。 不过,我想把这个应用到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 

这是一个让我一月和二月的例子。 要运行剩余的10个月(不必复制和粘贴这个10次,并手动键入单元格坐标为FO列)。 然后下面的代码是下行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次。 我宁愿不要多次input这些单元格坐标,而且可能会在我的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 

我可能在我的表中做了一些愚蠢的事情,但任何洞察力都将不胜感激。 谢谢!

你可以使用一个循环来运行每个月的求解器:

 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