是否可以在变量内执行公式?

时间:2019-10-02 08:05:26

标签: excel vba

我想知道在VBA中是否可以将变量的内容用作“代码”。例如:

x = 23

formula= "43,025*X^-0,452"

Value = ExecuteContentOf(formula)

我在excel中使用了幂曲线来计算代表4个不同x,y值的最佳曲线的公式。 (1,40)(7,20)(30,10)(60,6)

结果是带有公式的图形。 Excel会自动计算。使用VBA,我可以从对象标题中提取公式的文本。

我们的结果是= 43,025 * C2 ^ -0,452

现在我想在VBA中自己使用它,将C2更改为其他变量(而不是单元格),所以y = 43,025 * x ^ -0,452。 由于公式在字符串中。 可以告诉VBA解释它吗?

我正在寻找与Javascript上的EVAL函数相同的功能

2 个答案:

答案 0 :(得分:0)

以下函数和该函数的子调用将您的公式插入到具有指定范围作为参数的单元格中。您可以将其设置为任何单元格。

Sub evaluate()
Dim x As Range
Dim blah As String
Set x = Sheets("Sheet1").Range("A2")
blah = Formulaz(x)
Range("A3").Formula = blah
End Sub

Public Function Formulaz(x As Range)
Formulaz = "=43.025 *" & x.Address & "^-0.452"
End Function

要将其更改为采用字符串,您可以像这样简单地进行修改:

Dim x As String
Dim blah As String
x = Range("A2").Value
blah = Formulaz(x)
Range("A3").Formula = blah
End Sub

Public Function Formulaz(x As String)
Formulaz = "=43.025 *" & x & "^-0.452"
End Function

这将产生相同的结果(将公式插入到单元格中并显示解决方案),但是它将单元格的值作为参数。

正如OP所说的那样,这不是必需的,也许这样做更好:

Sub evaluate()
Dim x As String
Dim blah As String
x = "5"
blah = Formulaz(x)
Debug.print blah
End Sub

Public Function Formulaz(x As String)
Formulaz = 43.025 * x ^ -0.452
End Function

它返回带有x作为参数传递的表达式的值。 x = 5的输出将是20.78674作为字符串存储在Blah中。

答案 1 :(得分:0)

不清楚是在运行时需要从对象标题中提取公式,还是可以对其进行硬编码。

硬编码将是微不足道的。 Application.Evaluate将为您提供与Javascript中的EVAL函数非常相似的功能。

x = 23
formula= "43,025*" & x & "^-0,452"
Value = Application.Evaluate(formula)

但是,如果要在运行时即时获取公式,则这是一个单独的问题,因为您将需要在字符串中找到范围引用并将其替换为新变量。每次是否相同。那将非常简单。

我将把这项任务留给您。如果您需要帮助,请说明您的确切要求,我将更新答案。