用于评估表示公式的文本字符串的 UDF

Posted

技术标签:

【中文标题】用于评估表示公式的文本字符串的 UDF【英文标题】:UDF to evaluate a text string which represents a formula 【发布时间】:2017-02-01 10:27:36 【问题描述】:

这似乎是一个非常简单的问题,但我只是缺乏回答的知识,并且在谷歌搜索时找不到答案。

据我了解,当您在 Excel 的单元格中键入公式时,例如 =SUM(B1:B3),您输入的是文本字符串。按 Enter 键通过让 Excel 知道它是一个公式来计算此文本字符串。

在我的情况下,我没有输入文本字符串,它是在一个单元格中生成的,如下所示:

A1 包含'=SUM(x:y) (注意',即作为文本) A2 包含 =SUBSTITUTE(SUBSTITUTE(A1,"x","B1"),"y","B3") 返回 A2, =SUM(B1:B3) 作为文本字符串

我想要一个像 A3 中的 'EVALUATE()' 这样的 UDF,它与在 A3 中键入函数并按 Enter 的效果相同键。

A3 包含 =EVALUATE(A2)=EVALUATE("=SUM(B1:B3)") 相同 (可能在 SUM 中没有 = 符号) A3 然后返回以文本形式存储的公式的输出,就像您直接在其中输入 =SUM(B1:B3) 一样

我意识到在这个阶段给出示例/尝试的代码是习惯性的。不幸的是,我缺乏解决问题的基础领域的知识,所以我担心我的代码没什么可提供的。无论如何我都会发布它,或者至少是一个骨架:

Sub EVALUATE_Test() 'a temporary macro to run the EVALUATE function with an input text of "B1^2"
Debug.Print EVALUATE("B1^2")
End Sub

Function EVALUATE(InputFormula As String) 'defining the UDF and Input - I'm not sure how to dimension evaluate though, as it could output text or a number

'here is where the code goes to evaluate the InputFormula

EVALUATE = InputFormula & "hi" 'Obviously the real UDF won't need '& "hi" but I put it in to test the debugging!
End Function

我希望这足以继续,任何建议将不胜感激。

【问题讨论】:

您知道内置的 Evaluate 功能吗?这应该包含在您的思考中...Application.Evaluate(inputFormula),我想,一旦您删除“=”,那么大多数事情都可能得到解决。 您甚至不需要删除 '= 符号。 甚至不知道罗里 :-)。哎呀,只要用Evaluate这个问题就很容易解决了…… 【参考方案1】:

试试这个 UDF,看看它是如何工作的。可能需要稍作调整,但这是您需要的核心。

Public Function eval(ByVal str As String) As Variant
  eval = Application.Evaluate(str)
End Function

【讨论】:

我知道这不适用于某些功能,例如EVAL("HYPERLINK(""https://www.google.com"")") 不会给您链接,但至少它不会引发错误!我可以看到对于 VBA 拥有自己版本的那些函数需要进行一些调整,但感谢您的起点!

以上是关于用于评估表示公式的文本字符串的 UDF的主要内容,如果未能解决你的问题,请参考以下文章

如何在 hive udf 中使用 collect_set 的结果 - 评估方法?

UDF 在表格的每一行中插入一个文本字符串

excel表格函数公式教学 你知道吗?

如何对公式预先评估的范围求和

逐行输入评估与操作员以及如何存储更改值,直到用户键入“。”

如何评估 MySQL 存储的_function_ 中的简单数学公式?