【问题标题】:How to use goal seek function in Excel user function?如何在 Excel 用户功能中使用目标搜索功能?
【发布时间】:2017-07-12 01:44:23
【问题描述】:

在 MS excel 中有使用目标搜索的方法,如下代码。它工作正常。

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

我想使用一个函数来进行目标搜索,如下所示。

  Function fSeek(a As Range, b As Range, c As Range)
     a.GoalSeek Goal:=b.Value, ChangingCell:=c
     fSeek = "Ok"
   End Function

但是,代码运行平稳,在 c 范围内没有得到任何答案。我哪里错了?

【问题讨论】:

  • 用户定义函数 (UDF) 在从公式调用时不允许更改其他单元格。
  • 非常感谢您的回复。有没有办法达到相同的目标?我真的很想在同一个工作表中寻找许多目标。
  • 你可以这样做,但通过宏而不是公式。
  • 但是宏不能使用参数。带参数的子程序根本不显示宏列表。
  • 您总能找到一种方法来指定您想要查找的内容以及使用哪些参数。如果这些不是先验已知的单元格,您可以使用表单或InputBox(在宏内部)让用户输入它们。

标签: excel vba seek excel-udf


【解决方案1】:

我正在写一个答案,因为这个问题似乎正在重新出现。

底线是用户定义函数 (UDF) 在从公式调用时不允许更改其他单元格

解决方案:要自动搜索上帝,请编写 VBA 宏,而不是 UDF

宏可以自动在任何范围或一组单元格上寻找目标。由于宏没有参数,因此有很多方法可以让用户将单元格集指定为GoalSeek 和参数,并将它们路由到Range.GoalSeek 方法:

1- 设计一个专用的UserForm

2- 使用 VBA 的 InputBox 函数,或者可能带有参数 type:=8 的 Excel 的 Application.InputBox 函数来输入范围。

3- 在工作表上专门设置一些单元格,用户可以在其中输入参数。

【讨论】:

  • 非常感谢。我已经成功创建了一个对话框来按照您的建议进行目标搜索。
【解决方案2】:

谢谢大家回答我。很长一段时间后,我再次在这里找到了我的问题。 我碰巧通过使用事件找到了这个问题的解决方案。

在Microsoft Excel Object-Sheet1(Sheet1)中,我们只能写如下代码:

 '----------------------------------------------
 ' Goal seeking when the worksheet changes.
 '----------------------------------------------
 ' Here we want to do goal seek for Range("H18") 
 '  with the Goal cell as  Range("H21") 
 '  and  the changing cell as Range("G18").
 '
 Private Sub Worksheet_Change(ByVal Target As Range)
     Range("H18").GoalSeek Goal:=Range("H21"), ChangingCell:=Range("G18")
 End Sub

很酷吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多