VBA - 反转函数
VBA - reversing a function
是否可以反转 VBA 中的函数 - 我的意思是通过函数的值获得 argument/arguments 函数?当然,我们必须假设没有一对相同的值被分配给不同的 arguments/sets 个参数。
例如:
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
恐怕在一般情况下,这是不可能的。
最接近您的目标的方法是编写一个反函数来反转特定函数的逻辑,当且仅当目标函数从其参数产生唯一结果时。
一个函数是否"reversable"很大程度上取决于具体的函数。有些功能可能是可逆的,有些则不是。
因此,例如求和函数是不可逆的。如果您总结以下 5 个参数,您将在 return.
中得到一个解决方案
1 + 2 + 3 + 4 + 5 = 15
但是有很多可能性可以用 5 个参数得到 15
的总和。您需要求解方程组 15 = x₁ + x₂ + x₃ + x₄ + x₅
,这在代数上是不可能的。
但是您可以使用数值算法(例如使用求解器)来获得该方程的一个解(众多可能性之一)。但是这样一来,您最终会得到与原始可能性不同的任何可能性。所以 Solver 可能以 3 + 3 + 3 + 3 + 3 = 15
.
结束
所以结论是:
除非我们不知道原来的功能,否则我们不能说它是否可逆。
是否可以反转 VBA 中的函数 - 我的意思是通过函数的值获得 argument/arguments 函数?当然,我们必须假设没有一对相同的值被分配给不同的 arguments/sets 个参数。 例如:
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
恐怕在一般情况下,这是不可能的。
最接近您的目标的方法是编写一个反函数来反转特定函数的逻辑,当且仅当目标函数从其参数产生唯一结果时。
一个函数是否"reversable"很大程度上取决于具体的函数。有些功能可能是可逆的,有些则不是。
因此,例如求和函数是不可逆的。如果您总结以下 5 个参数,您将在 return.
中得到一个解决方案1 + 2 + 3 + 4 + 5 = 15
但是有很多可能性可以用 5 个参数得到 15
的总和。您需要求解方程组 15 = x₁ + x₂ + x₃ + x₄ + x₅
,这在代数上是不可能的。
但是您可以使用数值算法(例如使用求解器)来获得该方程的一个解(众多可能性之一)。但是这样一来,您最终会得到与原始可能性不同的任何可能性。所以 Solver 可能以 3 + 3 + 3 + 3 + 3 = 15
.
所以结论是:
除非我们不知道原来的功能,否则我们不能说它是否可逆。