目标寻求宏与目标作为一个公式

时间:2013-08-09 02:33:50

标签: vba excel-vba excel

我在这里抓住吸管,所以任何帮助都会很棒(即我不知道我在用VBA做什么)。

我正在尝试通过创建目标搜索宏来解决Excel中的循环引用问题 - 基本上

  1. S3 = M + S2
  2. S3 = L * G
  3. 我希望通过更改M.

    来寻求S3等于L * G

    所以,我已经把

      小区L * G中的
    • H32
    • {li> S3 H18, {li> M G18, 在S2
    • F18

    这是我到目前为止收集的内容。

    Sub GoalSeek()   
    Dim x As Integer
    x = Range("H32").Value    
    Range("H18").GoalSeek Goal:=x, ChangingCell:=Range("G18")     
    End Sub
    

    我收到“参考无效”错误,想法? 谢谢!

2 个答案:

答案 0 :(得分:5)

如果GoalSeek单元格包含值而不是公式,或者如果ChangingCell包含公式而不是值或任何值,则GoalSeek将抛出“无效引用”错误。

GoalSeek单元格必须包含直接或间接引用ChangingCell的公式;如果公式没有以某种方式引用ChangingCell,则GoalSeek可能无法收敛到答案或者可能产生无意义的答案。

我使用与您不同的GoalSeek公式测试了您的代码(我不太清楚某些术语是指单元格还是值)。

为了测试,我设置了:

  the GoalSeek cell  H18 = (G18^3)+(3*G18^2)+6
  the Goal cell      H32 =  11
  the ChangingCell   G18 =  0 

代码是:

Sub GSeek()
    With Worksheets("Sheet1")
        .Range("H18").GoalSeek _
        Goal:=.Range("H32").Value, _
        ChangingCell:=.Range("G18")
    End With
End Sub

代码产生了1.1038的(正确)答案,G18的值,H18中的公式产生11的值,这是我寻求的目标。

答案 1 :(得分:1)

我认为您的问题是Range("H18")不包含公式。此外,您可以通过删除x来提高代码效率。而是将代码更改为

Range("H18").GoalSeek Goal:=Range("H32").Value, ChangingCell:=Range("G18")