设置求解器循环以更改单元格引用、相邻列
setting solver loop to change cell references, adjacent columns
我正在尝试为二次优化编写一个宏。我的VBA技能非常有限,但是我手动使用求解器并录制了一个宏,我的代码目前是这样的:
Sub Macro2()
'
' Macro2 Macro
'
'
SolverReset
SolverAdd CellRef:="$C9:$C5", Relation:=3, FormulaText:="0"
SolverAdd CellRef:="$C6", Relation:=2, FormulaText:="1"
SolverOk SetCell:="$C4", MaxMinVal:=2, ValueOf:=0, ByChange:="$C9:$C5" _
, Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
End Sub
我想做的是创建一个求解器循环,以便下次单元格引用和目标单元格中的 C 列更改为 D 时,其他所有内容都将保持不变。我想对从 C 到 V 的 20 个相邻列执行此操作。将不胜感激任何帮助!
如果我在上面的评论中提出的假设是正确的,那么下面的代码可以满足您的需求 - 但是我无法测试所有代码,因为我没有求解器函数...见下文:
Public Sub sampleCode()
Dim targetWS As Worksheet
Dim colCounter As Long
Dim colAddress As String
Dim colLetter As String
Set targetWS = ThisWorkbook.Sheets(1) 'Make sure to replace sheet(1) with sheet(<your sheet name>)
For colCounter = 3 To 22 'Loop through columns C through V
'Get the column letter you want to run solver on
colAddress = Replace(targetWS.Range("A1")(1, colCounter).address, "$", "")
colLetter = Left(colAddress, InStr(1, colAddress, "1") - 1)
SolverReset
'Run solver but with the references being set by using colLetter
SolverAdd CellRef:=colLetter & "179:" & colLetter & "185", Relation:=3, FormulaText:="0"
SolverAdd CellRef:=colLetter & "186", Relation:=2, FormulaText:="1"
SolverOk SetCell:=colLetter & "174", MaxMinVal:=2, ValueOf:=0, ByChange:=colLetter & "179:" & colLetter & "185", Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Next
End Sub
希望这对您有所帮助,
TheSilkCode
我正在尝试为二次优化编写一个宏。我的VBA技能非常有限,但是我手动使用求解器并录制了一个宏,我的代码目前是这样的:
Sub Macro2()
'
' Macro2 Macro
'
'
SolverReset
SolverAdd CellRef:="$C9:$C5", Relation:=3, FormulaText:="0"
SolverAdd CellRef:="$C6", Relation:=2, FormulaText:="1"
SolverOk SetCell:="$C4", MaxMinVal:=2, ValueOf:=0, ByChange:="$C9:$C5" _
, Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
End Sub
我想做的是创建一个求解器循环,以便下次单元格引用和目标单元格中的 C 列更改为 D 时,其他所有内容都将保持不变。我想对从 C 到 V 的 20 个相邻列执行此操作。将不胜感激任何帮助!
如果我在上面的评论中提出的假设是正确的,那么下面的代码可以满足您的需求 - 但是我无法测试所有代码,因为我没有求解器函数...见下文:
Public Sub sampleCode()
Dim targetWS As Worksheet
Dim colCounter As Long
Dim colAddress As String
Dim colLetter As String
Set targetWS = ThisWorkbook.Sheets(1) 'Make sure to replace sheet(1) with sheet(<your sheet name>)
For colCounter = 3 To 22 'Loop through columns C through V
'Get the column letter you want to run solver on
colAddress = Replace(targetWS.Range("A1")(1, colCounter).address, "$", "")
colLetter = Left(colAddress, InStr(1, colAddress, "1") - 1)
SolverReset
'Run solver but with the references being set by using colLetter
SolverAdd CellRef:=colLetter & "179:" & colLetter & "185", Relation:=3, FormulaText:="0"
SolverAdd CellRef:=colLetter & "186", Relation:=2, FormulaText:="1"
SolverOk SetCell:=colLetter & "174", MaxMinVal:=2, ValueOf:=0, ByChange:=colLetter & "179:" & colLetter & "185", Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Next
End Sub
希望这对您有所帮助, TheSilkCode