dra*_*n11 41 worksheet-function microsoft-excel
假设我有一个类似"11+5"或什至"=11+5"存储在单元格中的文本字符串。Excel 中是否有一个函数可以让我实际评估该字符串,就好像它是一个公式一样?
这对于我希望能够在 Excel 中编写“动态”公式的另一个项目很有帮助。
chr*_*sen 32
EVALUATE 可在所有当前版本的 VBA 中使用
您可以将其包含在您的 VBA 代码中,或将其包装成一个简单的 UDF 以使其可用作工作表函数
Function ev(r As Range) As Variant
ev = Evaluate(r.Value)
End Function
Run Code Online (Sandbox Code Playgroud)
它基本上将传递的参数的值视为 Excel 公式,就像在单元格中输入一样
"11+5"并且"=11+5"会产生相同的结果
小智 18
=evaluate(put_reference[s]_here)
Run Code Online (Sandbox Code Playgroud)
这是一个半功能 - 它只能在名称管理器中使用。
这是您可以使用它的方式:
指向一个单元格并打开名称管理器(从“公式”选项卡或通过单击 CTRL+F3)

编写=evaluate(并单击您想要的单元格(最好保留相对引用)。
完成公式 )
给它一个 NAME - (在这个例子中我将称之为eva)。
单击“确定”。
现在,让我们假设您选择了 B1 并使所有这些都指向 A1。在 A1 中,您可以输入“ 1+1 ”,而在 B1 中您可以写入=eva- 一旦您按下 ENTER,B1 的值将是2. 由于名称管理器中的引用是相对的,您可以使用它=eva来获取从您想要的位置离开一个单元格的任何单元格的评估。(例如,在 B2 中,=eva将返回单元格 A2 的结果)
jle*_*ear 12
@karel 和 @Laurentiu Mirica 给出了一个很好的答案,有一个重要的警告:除非引用的单元格发生变化,否则评估函数不会重新计算。例如,单元格 C1 包含文本"A1+B1",D1 包含函数=eval。如果 A1 或 B1 中的值发生更改,则不会重新计算单元格 D1 。
这可以通过将 volatile 函数引入字符串或 eval 单元格来纠正。每次重新计算工作表时,这将强制重新计算。例如,单元格 C1 可以替换为=if(today(),"A1+B1",)。或者,D1 可以替换为=if(today(),eval,). 任何 volatile 函数都应该做。
第三种也是最简单的解决方案是将名称管理器中的半功能更改为 =if(today(),evaluate(c1),)
小智 6
=indirect()
Run Code Online (Sandbox Code Playgroud)
如果您在单元格中使用它(与连接一起),它可能非常有用。
例如,此公式将在另一个工作表上显示单元格 B5 的值(其名称存储在此工作表的单元格 A2 中):
=INDIRECT(CONCATENATE(A2,"!B5"))
Run Code Online (Sandbox Code Playgroud)
要使 INDIRECT 工作,必须打开外部工作表。