【问题标题】:Convert Literal Text to Formula将文字文本转换为公式
【发布时间】:2016-04-30 09:57:00
【问题描述】:

使用 MS Excel 2010:我使用 CONCATENATE 公式创建了一个看起来像公式的文本字符串,并且需要一个将文本字符串转换为公式的公式;无需使用 MS Excel 特殊粘贴功能或 VBA/宏。

示例:在单元格 B2:G2 中包含文本,在单元格 B4 中我有返回文本字符串的 CONCATENATE 文本公式

=TRIM(CONCATENATE(B2&" "&C2&" "&D2&" "&E2&" "&F2&" "&G2&" "&H2))

我希望 Excel 将此字符串解释为一个公式,并将单元格 B6 中的值返回/显示为:“永远做你自己......不要出去寻找成功的个性并复制它。” - 李小龙

我尝试使用INDIRECT 公式但没有成功,不确定这是我的公式还是可能。示例:单元格 B6:

=INDIRECT(CONCATENATE("B4"))

【问题讨论】:

  • a) 您没有正确使用CONCATENATE function。 b) 我认为INDIRECT function 不会满足您的要求。
  • @Jeeped 是对的。你没有连接任何东西,因为 (B2&" "&C2&" "&D2&" "&E2&" "&F2&" "&G2&" "&H2) 已经是一个连接字符串。这是正确的方法:=CONCATENATE(B2," ",C2," ",D2," ",E2," ",F2," ",G2," ",H2)
  • CONCATENATE 和 "&" 是一回事。你做一个或另一个。您所做的,首先使用 & 组合所有文本,然后要求 concatenate 函数将单个字符串组合成单个字符串。
  • 对函数 EVALUATE 进行搜索。您不能像调用其他函数一样调用它,只需将其放入电子表格的公式中即可,但您可以在命名范围内调用它。
  • 您好感谢间接功能。我一直在使用大型数据库,我需要使用基于日期的 vlookup 函数。每次我必须在 vlookup 公式中手动编辑日期。但是现在通过使用间接函数,我可以使用将日期转换为文本的间接函数并在 vlookup 公式中使用来更快地使用工作。非常感谢所有解释间接函数将文本转换为公式的人。

标签: excel text excel-formula excel-indirect


【解决方案1】:

1) CONCATENATE 和 & 是一回事。换句话说,你写成字符串的公式可以翻译为:

=TRIM(CONCATENATE(CONCATENATE(CONCATENATE(CONCATENATE(CONCATENATE(CONCATENATE(CONCATENATE(CONCATENATE(CONCATENATE(CONCATENATE(CONCATENATE(CONCATENATE(CONCATENATE(B2)," "),C2)," "),D2)," "),E2)," "),F2)," "),G2)," "),H2))

如果你要为你的函数写出 CONCATENATE,然后将你想要连接在一起的所有字符串分开,就像 @MarcoVos 在 cmets 中指出的那样,你的问题:

=CONCATENATE(B2," ",C2," ",D2," ",E2," ",F2," ",G2," ",H2)

或者,如果您想使用更常见的 & 形式,您的公式看起来就像您最初发布的没有 CONCATENATE 的内容,如下所示:

=B2&" "&C2&" "&D2&" "&E2&" "&F2&" "&G2&" "&H2

最后两个公式将产生相同的结果。

2) INDIRECT 函数将文本转换为单元格引用或地址。它不会将公式转换为文本并吐出公式的结果。宏 Vos 在他的回答中是正确的,因为 FORMULATEXT() 将在引用的单元格中将公式显示为文本或字符串。如果您需要遵循提供字符串的顺序,然后必须将字符串转换为公式,那么我建议您使用 EVALUATE 函数。但是,您不能使用常规 excel 公式中的 EVALUATE。不过,您可以从命名范围调用它。创建一个命名范围。例如,我们称它为 EvalText。在创建命名范围的公式部分,输入:

=EVALUATE($B$4)

它会自动添加工作表名称。现在,您可以在工作表上的任何单元格中输入:

=EvalText

它会返回 B4 中的任何字符串作为公式。如果不是正确的 excel 公式,它会吐出一个错误。

【讨论】:

  • 有一点需要注意,因为我注意到名称范围内的 EVALUATE() 不是自动计算。它不会随着文本的变化而自动更新。必须转到单元格并按 F2 Enter 更新值。
  • 但好主意,我喜欢这个解决方案
  • 实际上,如果您的工作表设置为自动更新,它应该会自动更新。
【解决方案2】:

为什么不反过来呢?

放:

=TRIM(CONCATENATE(B2&" "&C2&" "&D2&" "&E2&" "&F2&" "&G2&" "&H2))

在单元格 B6 和

=FORMULATEXT(B6)

在单元格 B4 中。

【讨论】:

  • 抱歉,我不小心没有提供位于单元格 B4 中的正确文本字符串,这里是实际的公式文本: =CONCATENATE("=TRIM(CONCATENATE(B2&" "&C2&" "&D2&" "&E2& ""&F2&" "&G2&" "&H2))") 我需要或希望转换为在单元格 B6 中输出结果的实际公式...希望这会有所帮助
【解决方案3】:

命名“范围”的问题在于它不是重新计算循环的一部分。 定义(在 VBA 中)一个函数

Function MyEval(text As String)
    MyEval = Evaluate(text)
End Function

添加

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.CalculateFull
End Sub

到正在考虑的工作表的代码表 解决问题。 当然,工作簿还没有保存为 XLSM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多