首页 > 解决方案 > VBA Solver Loop:“SetCell”和“ByChange”单元格随每个循环而变化(整行的 Excel KMV)

问题描述

我无法处理 VBA 循环。

Excel 上的Solver功能允许非线性方程求解。我想Solver在 Excel 上使用一整行(maxMinVal=2, or Minimize)。在互联网上进行了可怕的搜索后,但没有提示我的具体问题。

我在此处展示了我正在尝试处理的数据 (不可下载:Google Drive 数据视图)。

正如(我希望)所见,最后一列包含Squared errors. 我想(column Q)通过Nonlinear GRG(错误是我的目标)最小化这一列,将可变单元格作为"A" (column H)同一"sigmaA" (column I)行。已经为Q3 to Q7 (Q12 and Q18 also).

例子:

最小化 $Q$8 (0.00021) 更改变量单元格 $H$8:$I$8(第 8 行的“A”和“sigmaA”)。

我希望循环对整个平方残差列(2598 个单元格)执行相同的过程。

到目前为止,我的 VBA 脚本如下。这For i=0 to 10只是为了测试代码是否适用于示例(加速计算):

Sub Macro1()

Dim i As Integer

For i = 0 To 10

' Macro1 Macro
' Solver (Solve nonlinear problems in a row - column format)
    SolverReset

    SolverOk SetCell:="$Q$i", MaxMinVal:=2, ValueOf:=0, ByChange:="$H$i:$I$i", _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve (True)
        
    'Approve the solutions and avoid the popups
    
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
    
Next i
    
End Sub

当我运行脚本时,要么 VBA 面板崩溃,要么加载时间有点长,然后……什么也没有发生(错误不接近 0,000)。

这个问题与不同,因为我尝试过但没有工作(也在我的 Solver VBA 脚本中)。此外,它没有为MaxMinVal:=2Valueof:=0Engine:=1, EngineDesc:="GRG Nonlinear"

标签: excelvbaexcel-solver

解决方案


推荐阅读