【问题标题】:Excel VBA Named RangeExcel VBA 命名范围
【发布时间】:2017-10-01 12:06:19
【问题描述】:

我正在运行一个vba代码如下:

Dim score As Integer

SolverReset
score = Range("N3").Value
If score = 1 Then
    SolverLoad loadArea:=Range("N4:N11")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
    SolverReset
    SolverLoad loadArea:=Range("O4:O14")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
    SolverReset
Else:
    SolverReset
    SolverLoad loadArea:=Range("P4:P15")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
End If

SolverReset
score = Range("N48").Value
If score = 1 Then
    SolverLoad loadArea:=Range("N49:N56")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
    SolverReset
    SolverLoad loadArea:=Range("O49:O59")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
    SolverReset
Else:
    SolverReset
    SolverLoad loadArea:=Range("P49:P60")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
End If

如您所见,代码的前半部分再次重复。范围从N3到N48N4到N49等变化。

现在我必须不断重复整个代码 172 次迭代,只更改范围部分,它是对求解器位置的单元格引用。

有什么方法可以让我使用 for 循环重复该过程 172 次,方法是在每次迭代后更改引用。

可见,所有引用每次迭代都会增加 +45。

【问题讨论】:

    标签: vba excel excel-formula excel-2016


    【解决方案1】:

    试试这个。很可能我有一些数字没有,但希望你能明白

    Sub x()
    
    Dim score As Long, r As Range, i As Long
    
    Set r = Range("N3")
    
    For i = 1 To 172
        SolverReset
        score = r.Value
        If score = 1 Then
            SolverLoad loadArea:=r.Offset(1).Resize(8)
            SolverSolve UserFinish:=True
            SolverFinish KeepFinal:=1
            SolverReset
            SolverLoad loadArea:=r.Offset(1, 1).Resize(11)
            SolverSolve UserFinish:=True
            SolverFinish KeepFinal:=1
            SolverReset
        Else:
            SolverReset
            SolverLoad loadArea:=r.Offset(1, 2).Resize(12)
            SolverSolve UserFinish:=True
            SolverFinish KeepFinal:=1
        End If
        Set r = r.Offset(45)
    Next i
    
    End Sub
    

    【讨论】:

    • 您也可以在 for 循环中执行第 45 步
    猜你喜欢
    • 2019-12-05
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多