将函数的文本公式转换为“真实”公式

3

我在单元格A1中有一个公式:VLOOKUP(A2;Table3[#All];3;FALSE)。我正在努力寻找一种方法,在B1中输出上述公式的结果。

显然,你可以使用仅在VBA中可访问的“Evaluate”函数计算文本公式,例如:

Function Eval(Ref As String)
Application.Volatile
Eval = Evaluate(Ref)
End Function

然后您就可以在表格中的任何地方调用它,例如,如果您在单元格A1中输入1+2,并在单元格B1中输入=Eval(A1),则在B1中获得输出3。因此,在这种情况下它可以很好地工作!

enter image description here

如果你要“评估”一个简单的数字,它能很好地工作: enter image description here

然而

我发现“评估”不能处理包含函数(例如上面的Vlookup公式)的文本。

例如,如果你在A2中输入Eval(A1)(其中“Eval”是一个函数),然后在B2中输入=Eval(A2),你会得到“#VALUE”的输出。 以上公式也会得到相同的输出。

enter image description here

有人知道如何计算文本公式,例如:VLOOKUP(A2;Table3[#All];3;FALSE)(不需要手动添加“=”符号)吗?

谢谢!


1
尝试将VLOOKUP中的所有;更改为, - BigBen
1
或者使用 SUBSTITUTE 将所有的 ; 替换为 ,,然后对结果进行 Eval - BigBen
1
我不确定是否有更权威的文档,但似乎您需要使用“Evaluate”时使用,作为参数分隔符,无论您的本地设置如何(尽管我无法自行测试)。 - BigBen
1个回答

4

我不确定这是否有更权威的文件记录,但是此链接提到,无论您的本地设置如何,在公式中,Evaluate需要逗号作为参数分隔符。

至于VLOOKUP,可以将原始文本中的;改为,,或使用SUBSTITUTEEval结果。


谢谢!这很奇怪,因为我总是在我的公式中使用;。我希望他们不会在即将推出的版本中决定改成;,那将破坏我为可扩展性所做的努力! - Takichiii
1
说实话,我怀疑它不会改变。这对我来说也是新的,我本以为Evaluate会考虑本地分隔符,但显然并不是这样。 - BigBen
我一直理解这背后的原因是,因为VBA是一种以英语/美国为基础的语言,所以输出始终相同,与区域设置无关。同样的,例如我不允许在Evaluate中使用荷兰等效的函数名称。在VBA中,另一个明显的例子是日期格式和识别也是基于en_US - JvdV
@JvdV 是的,那是一份详尽的解释并且很有道理。日期格式也是一个好点。 - BigBen
1
虽然我找不到任何特别提到VBA中这种行为的MS文档,但是这篇文章确实阐述了VBA代码区域设置(id 1033,即en_US)的概念。这个MS Visual Studio 2019 页面也提到了同样的概念。--> NerdMode OFF =) - JvdV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接