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

时间:2017-02-01 10:27:36

标签: excel vba excel-vba user-defined-functions

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

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

在我的情况下,我不输入文本字符串,它在单元格中生成如下:

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

我想要一个像' EVALUATE()'在A3中,与在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

我希望能继续下去,我们将非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

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

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