使用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"))
答案 0 :(得分:2)
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在你的问题的评论中指出的那样,将你想要的所有字符串分开,就像昏迷一样:
=CONCATENATE(B2," ",C2," ",D2," ",E2," ",F2," ",G2," ",H2)
或者如果你想使用更常见的形式&你的公式看起来就像你原来发布的那样没有CONCATENATE就像这样:
=B2&" "&C2&" "&D2&" "&E2&" "&F2&" "&G2&" "&H2
最后两个公式将产生相同的结果。
2)INDIRECT函数将文本转换为单元格引用或地址。它不会将公式转换为文本并吐出公式的结果。 Macros Vos在他的回答中是正确的,因为FORMULATEXT()会将引用单元格中的公式显示为文本或字符串。如果您需要按照提供字符串的顺序进行操作,然后必须将字符串转换为公式,那么我建议您使用EVALUATE函数。但是,您不能使用常规excel公式中的EVALUATE。您可以从命名范围调用它。创建命名范围。比如让我们称之为EvalText。在用于创建命名范围的公式部分中,输入:
=EVALUATE($B$4)
它会自动添加工作表名称。现在,您可以在工作表的任何单元格中输入:
=EvalText
它将返回B4中的任何字符串作为公式。如果它不是一个合适的excel公式,它将吐出一个错误。
答案 1 :(得分:0)
为什么不反过来呢?
把:
=TRIM(CONCATENATE(B2&" "&C2&" "&D2&" "&E2&" "&F2&" "&G2&" "&H2))
在单元格B6和
中=FORMULATEXT(B6)
在单元格B4中。
答案 2 :(得分:0)
名为“ Range”的问题是它不属于Recalc-Loop。 在VBA中定义功能
Function MyEval(text As String)
MyEval = Evaluate(text)
End Function
并添加
Private Sub Worksheet_Change(ByVal Target As Range)
Application.CalculateFull
End Sub
到正在考虑的工作表的代码表中 解决了问题。 当然,该工作簿还不能另存为XLSM。