【问题标题】:Convert text formula of a function to a 'real' formula将函数的文本公式转换为“真实”公式
【发布时间】:2019-09-20 14:04:10
【问题描述】:

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

显然,您可以使用只能通过 VBA 访问的“评估”函数来计算文本公式,如下所示:

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

然后您可以在工作表中的任何位置调用它,例如,如果您在单元格 A1 中输入 1+2,在单元格 B1 中输入 =Eval(A1),您会在 B1 中得到输出 3。所以在这种情况下它可以正常工作!

当您“评估”一个简单的数字时也很有效:

但是

我发现 Evaluate 不适用于包含函数的文本(例如我上面的 Vlookup 公式)。

例如,如果您将 Eval(A1) 放入 A2(其中 'Eval' 本身是一个函数),然后将 =Eval(A2) 放入 B2,您会得到“#VALUE”。 与上述公式的输出相同。

有人知道如何计算如下文本公式:VLOOKUP(A2;Table3[#All];3;FALSE)(无需在公式前手动添加“=”)吗?

谢谢!

【问题讨论】:

  • 尝试在 VLOOKUP 中将所有 ; 更改为 ,
  • 或者使用 SUBSTITUTE 将所有的; 更改为,Eval 结果。
  • 我不确定是否记录在更权威的地方,但似乎您需要使用, 作为Evaluate 的参数分隔符,无论您的本地设置如何(尽管我可以不要测试自己)。
  • @BigBen OMG 非常感谢它确实有效! (即使在公式中使用, 通常在我的法国办公室里从来没有用过)你救了我的命!!

标签: excel excel-formula vlookup evaluate


【解决方案1】:

我不确定它是否记录在更权威的地方 - this link 确实提到了它 - 但Evaluate 需要逗号作为公式中的参数分隔符,无论您的本地设置如何。

VLOOKUP而言,要么将原文中的;更改为,,要么使用SUBSTITUTEEval结果。

【讨论】:

  • 谢谢!!这很奇怪,因为我总是在我的公式中使用;。我希望他们不要决定在即将发布的版本中将其更改为 ;,这会破坏我为可扩展性所做的努力!
  • 老实说,我怀疑它会改变。这对我来说也是新的,我原以为Evaluate 会考虑本地分隔符,但显然不是。
  • 我一直理解这背后的原因是因为 VBA 是一种基于英语/美国的语言,所以输出总是相同的,与区域设置无关。以同样的方式,例如,我不允许在Evaluate 中使用我的荷兰语等值函数名称。这个en_US 基础的另一个明显示例是 VBA 中的日期格式/识别。
  • @JvdV 是的,这是一个透彻的解释并且是有道理的。日期格式也很好。
  • 虽然我在 VBA 中找不到任何特别提到此行为的 MS 文档,但 this 文章确实提出了 VBA 代码区域设置的概念(id 1033,为 en_US)。这个 MS Visual Studio 2019 page 也提到了同样的概念。 --> 书呆子模式关闭 =)
猜你喜欢
  • 2011-05-27
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多