Excel 函数是否可以像公式一样对字符串进行求值?

Excel 函数是否可以像公式一样对字符串进行求值?

假设我有一个文本字符串,例如"11+5"或甚至"=11+5"存储在单元格中。Excel 中是否有一个函数可以让我真正评估该字符串,就像它是一个公式一样?

这对于我希望能够在 Excel 中编写“动态”公式的另一个项目很有帮助。

答案1

EVALUATE在所有当前版本的 VBA 中均可用

您可以将其包含在 VBA 代码中,或将其包装到简单的 UDF 中,以使其可用作工作表函数

Function ev(r As Range) As Variant
    ev = Evaluate(r.Value)
End Function

它基本上将传递的参数的值视为 Excel 公式,就像在单元格中输入一样

"11+5""=11+5"会产生相同的结果

答案2

=evaluate(put_reference[s]_here)

这是一个半函数 - 它可以仅有的在名称管理器中使用。

使用方法如下:

  • 指向一个单元格,然后打开名称管理器(从“公式”选项卡或单击 CTRL+F3)

    评估示例

  • 写入=evaluate(并单击您想要的单元格(最好保留相对引用)。

  • 完成公式)

  • 给它一个名称-(在这个例子中,我就叫它eva)。

  • 点击好的

现在,假设您已选择 B1 并将所有这些引用到 A1。在 A1 中,您可以输入“1+1“并且在 B1 中写入=eva- 一旦你按下 ENTER,B1 的值将为2。由于名称管理器中的引用是相对的,你可以使用它=eva来获取距离你想要的位置左边任何单元格的求值。(例如在 B2 中,=eva将返回单元格 A2 的结果)

答案3

@karel 和 @Laurentiu Mirica 的出色回答有一个重要的警告:除非引用的单元格发生变化,否则评估函数不会重新计算。例如,单元格 C1 包含文本,"A1+B1"而 D1 包含函数=eval。如果 A1 或 B1 中的值发生变化,则单元格 D1不会重新计算

评估问题的演示

可以通过在字符串或 eval 单元格中引入易失性函数来纠正此问题。每次重新计算工作表时,这都会强制重新计算。例如,单元格 C1 可以替换为=if(today(),"A1+B1",)。或者,D1 可以替换为=if(today(),eval,)。任何易失性函数都可以。

第三个也许是最简单的解决方案是将名称管理器中的半功能更改为=if(today(),evaluate(c1),)

答案4

2021 年的脚注——随着 LAMBDA 函数(在撰写本文时在 Office 365 测试版中)的引入,情况发生了一些变化,该函数可以将参数从工作表单元格传递给名称管理器函数evaluate

最小示例:对于EVAL可用于单元格表达式的用户定义函数,我们可以在名称管理器中进行以下名称绑定:

EVAL
=LAMBDA(s, evaluate(s))

相关内容