假设我有一个文本字符串"11+5"
,甚至"=11+5"
存储在一个单元格中。Excel中是否有一个函数可以让我像评估公式那样实际评估该字符串?
这将对另一个我希望能够在Excel中编写“动态”公式的项目很有帮助。
假设我有一个文本字符串"11+5"
,甚至"=11+5"
存储在一个单元格中。Excel中是否有一个函数可以让我像评估公式那样实际评估该字符串?
这将对另一个我希望能够在Excel中编写“动态”公式的项目很有帮助。
Answers:
EVALUATE
在所有当前版本的VBA中可用
您可以将其包含在VBA代码中,或将其包装到简单的UDF中以使其可用作工作表功能
Function ev(r As Range) As Variant
ev = Evaluate(r.Value)
End Function
基本上,将传递的参数的值视为Excel公式,就像在单元格中输入的一样
"11+5"
并"=11+5"
会产生相同的结果
=evaluate(put_reference[s]_here)
这是半功能- 只能在名称管理器中使用。
这是您可以使用的方式:
指向一个单元格,然后打开“名称管理器”(从“公式”选项卡或通过单击CTRL + F3)
编写=evaluate(
并单击所需的单元格(最好保留相对引用)。
)
eva
)。 现在,让我们假设您选择了B1并将所有这些都引用为A1。在A1中,您可以输入“ 1 + 1 ”,在B1中,您可以写=eva
-按下ENTER键后,B1值将为2
。由于名称管理器中的引用是相对的,因此您可以使用它=eva
来评估从所需位置剩下一个单元格的任何单元格。(例如,在B2中,=eva
将返回单元格A2的结果)
=auswerten(...)
@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),)
=indirect()
如果在单元格中(并排使用)使用它,则将非常有用。
例如,此公式将在另一个工作表上显示单元格B5的值(其名称存储在此工作表的单元格A2中):
=INDIRECT(CONCATENATE(A2,"!B5"))
要使间接工作正常,必须打开外部工作表。