首页 > 解决方案 > 多列和多表的VBA GoalSeek for循环

问题描述

如何将其更改为 VBA 中的 for 循环?

Sub GoalSeekV1()
            
            Range("E34").GoalSeek Goal:=0, ChangingCell:=Range("Inputs!$F$73")
            Range("F34").GoalSeek Goal:=0, ChangingCell:=Range("Inputs!$G$73")
            Range("G34").GoalSeek Goal:=0, ChangingCell:=Range("Inputs!$H$73")
            Range("H34").GoalSeek Goal:=0, ChangingCell:=Range("Inputs!$I$73")
            Range("I34").GoalSeek Goal:=0, ChangingCell:=Range("Inputs!$J$73")
            Range("J34").GoalSeek Goal:=0, ChangingCell:=Range("Inputs!$K$73")
            Range("K34").GoalSeek Goal:=0, ChangingCell:=Range("Inputs!$L$73")

End Sub

我曾尝试使用 .cell(x, y) 但失败了,请帮忙。

谢谢。

标签: excelvba

解决方案


这是一种可以通过循环执行此操作的方法:

Sub GoalSeekV1()

    Dim rngStartGoal As Range
    Set rngStartGoal = Range("E34")
    
    Dim rngStartInput As Range
    Set rngStartInput = Range("Inputs!$F$73")
    
    Dim columnOffset As Integer
    For columnOffset = 0 To 6
        rngStartGoal.Offset(0, columnOffset).GoalSeek Goal:=0, ChangingCell:=rngStartInput.Offset(0, columnOffset)
    Next

End Sub

我建议命名起始目标单元格和起始输入单元格,因为您可以在代码中使用这些名称。所以代码将类似于Set rngStartGoal = Range("START_GOAL")而不是Set rngStartGoal = Range("E34"). 这还有另一个优点:如果您移动这些单元格,代码仍然可以工作。


推荐阅读