【问题标题】:VBA - reversing a functionVBA - 反转功能
【发布时间】:2018-03-08 12:57:08
【问题描述】:

是否可以在 VBA 中反转函数 - 我的意思是通过函数的值获取函数的参数/参数?当然,我们必须假设没有一对相同的值被分配给不同的参数/参数集。 例如:

Function func(arg1 As ..., arg2 As ..., ..., argn As ...) As (valType)
 func(arg1,arg2,...,argn) = ...
End Function

Sub get_argument()

Const val = ...

Workbooks(...).Worksheets(...).Cells(...,...).Value = func^(-1)(val)

End Sub

【问题讨论】:

  • 一个函数可能是可逆的,也可能不是可逆的(如你所说,取决于输入和输出之间是否存在 1:1 或 1:n 映射),但由程序员来实现反函数。没有能够打电话给func^(-1)(val)的概念。
  • 您可以尝试使用Solver (或等效的)来实现您的目标。
  • 好的,非常感谢。

标签: excel function reverse vba


【解决方案1】:

一个函数是否“可逆”取决于具体的函数。有些功能可能是可逆的,而另一些则不是。

因此,例如 sum 函数不能是可逆的。如果你总结以下 5 个参数,你会得到一个解决方案。

1 + 2 + 3 + 4 + 5 = 15

但是有很多可能性可以得到 15 和 5 个参数的总和。您需要求解方程组15 = x₁ + x₂ + x₃ + x₄ + x₅,这在代数上是不可能的。

但是您可以做的是使用数值算法(例如,使用求解器)来获得该方程的一个解(众多可能性之一)。但是这样一来,您最终将获得与原始可能性不同的任何可能性。所以求解器可能会以3 + 3 + 3 + 3 + 3 = 15 结束。

所以结论是:
除非我们不知道原始函数,否则我们不能说它是否可逆。

【讨论】:

    【解决方案2】:

    恐怕一般来说,这是不可能的。

    当且仅当目标函数从其参数中产生唯一结果时,您可以编写一个逆函数来反转特定函数的逻辑,最接近您的目标。

    【讨论】:

    • 当然,如果它在工作表上用作 UDF,您可以找到保存它的单元格并读取单元格的 .formula 属性。
    • 感谢您的解释,VBA 中没有针对该问题的通用解决方案。编写反函数是一种选择。但是,由于参数和值对的数量有限以及编写新函数的复杂性,我不会这样做。我宁愿使用用户定义类型。
    猜你喜欢
    • 2017-07-30
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2016-02-26
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多