跨多个列和行的解算器VBA宏
VBA新手。在互联网上搜索,无法找到解决方案(但我在这个过程中学到了很多) 我运行solver来求解一个收入数字,该数字将在给定某些费用的情况下为我提供指定的利润率。我已经准备好了,还有一个潜艇,可以在一个月内正常完成这项任务。然而,我试图将此应用于12列(12个月)。然后将循环向下移动19行。在这12列上运行求解器6次,以此类推 代码如下:跨多个列和行的解算器VBA宏,vba,excel,solver,Vba,Excel,Solver,VBA新手。在互联网上搜索,无法找到解决方案(但我在这个过程中学到了很多) 我运行solver来求解一个收入数字,该数字将在给定某些费用的情况下为我提供指定的利润率。我已经准备好了,还有一个潜艇,可以在一个月内正常完成这项任务。然而,我试图将此应用于12列(12个月)。然后将循环向下移动19行。在这12列上运行求解器6次,以此类推 代码如下: Sub Monthly() SolverReset SolverAdd CellRef:="$d$40", Relation:=2, FormulaT
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
我可能在我的工作表上做了一些愚蠢的事情,把事情搞砸了,但任何洞察都将不胜感激。谢谢 您可以使用循环在每个月运行解算器:
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
非常好-工作非常好。我可以使用这个脚本6次,只需将D40地址更改为D59、D78等(每次逐步减少19个)。谢谢!不知怎的,“工具”>“引用”>“解算器”复选框未选中。问题解决