我需要H列为3%,通过移动B列。为此,我使用了一个使用解算器的宏,但当我有1000行时,它会变得非常慢,而且经常崩溃。
有没有可能将Solver与Arrays结合起来以获得超快的结果?
我使用的代码是:
Sub SolverMacro()
Dim LR As Integer
LR = Cells(Rows.Count, "H").End(xlUp).Row
For i = 2 To LR
SolverReset
SolverOk SetCell:="$H$" & i, MaxMinVal:="3", ValueOf:=0.03, ByChange:="$B$" & i, Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve True
Next
End Sub
字符串
的数据
1条答案
按热度按时间7gcisfzg1#
合并多个规划求解运算并提高速度的一种方法是,您可以为
ByChange
参数指定一个多单元格区域(例如,ByChange:=Range("C2:C8")
)的值。这样,您就可以提供C列中的所有值作为输入,而不是一次提供一个单元格。然后,对于
SetCell
,必须创建一个依赖于H列中所有值的单元格。例如,您可以进行下列(数组函数)计算:字符串
基本上,这是二次loss function,当与所需值(0.03)的距离增大时,该二次loss function变大。若要获得所需的结果,可以要求规划求解将其最小化,或要求规划求解将其值设置为零。
但是,请注意,在测试了更大的范围后,规划求解的输入范围似乎限制为200个单元格。这意味着,如果有更多行,则需要将它们拆分为200行的批处理。