excel 使用解算器的宏速度太慢

rn0zuynd  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(111)

我需要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

字符串


的数据

7gcisfzg

7gcisfzg1#

合并多个规划求解运算并提高速度的一种方法是,您可以为ByChange参数指定一个多单元格区域(例如,ByChange:=Range("C2:C8"))的值。
这样,您就可以提供C列中的所有值作为输入,而不是一次提供一个单元格。然后,对于SetCell,必须创建一个依赖于H列中所有值的单元格。例如,您可以进行下列(数组函数)计算:

=SUM((H2:H8-0.03)^2)

字符串
基本上,这是二次loss function,当与所需值(0.03)的距离增大时,该二次loss function变大。若要获得所需的结果,可以要求规划求解将其最小化,或要求规划求解将其值设置为零。
但是,请注意,在测试了更大的范围后,规划求解的输入范围似乎限制为200个单元格。这意味着,如果有更多行,则需要将它们拆分为200行的批处理。

相关问题