【问题标题】:UDF to evaluate a text string which represents a formula用于评估表示公式的文本字符串的 UDF
【发布时间】: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这个问题就很容易解决了……

标签: vba excel user-defined-functions


【解决方案1】:

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

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

【讨论】:

  • 我知道这不适用于某些功能,例如EVAL("HYPERLINK(""https://www.google.com"")") 不会给您链接,但至少它不会引发错误!我可以看到对于 VBA 拥有自己版本的那些函数需要进行一些调整,但感谢您的起点!
猜你喜欢
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多