Excel函数将字符串当作公式来求值?


26

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

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


3
excel拥有此EVALUATE()函数即可完成此操作。但是那是很久以前的事了,我对新的Excel不太确定。会四处张望,看看我是否能找到等同的东西。
aCuria'3

1
该功能听起来很熟悉,但我当然不能在Excel2007中找到它,而这正是我目前正在使用的功能。
drapkin11 2011年

我也找不到它= /
aCuria'3

Answers:


26

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

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

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

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

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


1
我忘了所有关于Excel中用户定义函数的知识,谢谢。
drapkin11 2011年

我做了一个小的修改,将Range参数更改为String,并且对我来说效果很好。谢谢
Makah 2014年

17
=evaluate(put_reference[s]_here)

这是半功能- 只能在名称管理器中使用。

这是您可以使用的方式:

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

    评估示例

  • 编写=evaluate(并单击所需的单元格(最好保留相对引用)。

  • 用完成公式 )
  • 给它起一个名字-(在此示例中,我将其称为eva)。
  • 单击确定

现在,让我们假设您选择了B1并将所有这些都引用为A1。在A1中,您可以输入“ 1 + 1 ”,在B1中,您可以写=eva-按下ENTER键后,B1值将为2。由于名称管理器中的引用是相对的,因此您可以使用它=eva来评估从所需位置剩下一个单元格的任何单元格。(例如,在B2中,=eva将返回单元格A2的结果)


1
很好-很高兴知道。它甚至适用于表列:= EVALUATE(Tablename [@ [column]])在大多数Excel帮助或高级教程中都找不到的轻松内容
Paschi,2017年

1
...和通常使用excel公式一样,如果您使用本地化的版本,则需要使用本地化的函数-例如,在Excel 2016 DE中,它被称为=auswerten(...)
kiwiwings

6

@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),)


谢谢一段时间以来,我一直在寻找这样的把戏:)
Ben Personick

4
=indirect()

如果在单元格中(并排使用)使用它,则将非常有用。

例如,此公式将在另一个工作表上显示单元格B5的值(其名称存储在此工作表的单元格A2中):

=INDIRECT(CONCATENATE(A2,"!B5"))

要使间接工作正常,必须打开外部工作表。


不起作用,返回#REF
SIslam

9
INDIRECT可以执行数学和函数,但仅作为创建单元格引用的一部分。在问题中提出的一般意义上不能使用它。
fixer1234 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.