Excel 中 FORMULATEXT 的反义词

Excel 中 FORMULATEXT 的反义词

有没有一个函数可以做相反的事情FORMULATEXT

例如在单元格中B2我有:

='[Workshop Schedule 2020.xlsx]Lisburn'!D7

C2我使用FORMULATEXT和中REPLACE,将 LISBURN 替换为 CANNOCK:

=REPLACE(FORMULATEXT(B2),32,7,"CANNOCK")

以字符串形式返回以下内容。

='[Workshop Schedule 2020.xlsx]CANNOCK'!D7

我现在想将此字符串用作公式。我无法使用,INDIRECT因为它指向外部工作簿。

答案1

您可以创建一个用户定义函数,例如:

Public Function eval(s As String) As Variant
    eval = Evaluate(s)
End Function

因此,如果A1包含文本字符串:

=1/2 & " some text"

然后:

在此处输入图片描述

用户定义函数 (UDF) 非常容易安装并使用:

  1. ALT-F11 打开 VBE 窗口
  2. ALT-I ALT-M 打开新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

消除UDF:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

使用Excel 中的 UDF:

=eval(A1)

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关 UDF 的详细信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能使其工作!

答案2

我赞赏您愿意使用 VBA 和 UDF,它们让很多事情变得更容易。对于那些不熟悉 VBA 的人来说,UDF 是让他们熟悉 VBA 的好地方,因此它既是入门工具,又常常是绝佳的解决方案。

不过,如果您愿意,您可以不使用 UDF 来做到这一点。这样做非常快,而且不需要像 UDF 那样规划方法,因为您将让 Excel 来弄清楚如何评估结果。

它还可以对您对类似于该INDIRECT()功能的愿望直接表示“是”。

您可以使用旧的宏语言(已有 25 年历史)函数EVALUATE。它可用,但仅在命名范围函数中可用。(在宏中,但 Gary 的学生已经完成了一个很好的宏。)将函数输入到工作表本身将失败。

创建一个Named Range(可能名为“horsey”)。为其Refers to值输入以下公式:

=EVALUATE(C2)

并保存,关闭命名范围管理器。

现在输入

=horsey

放入工作表上的任何单元格(嗯,B2 和 C2 除外!)将执行INDIRECT()与单元格引用完全相同的操作。它获取 C2 中的字符串(包括“=”或不包括“=”都没有区别)并将其视为公式。

人们通常认为,EVALUATE()它的作用有限,只是将一些单元格输入转换17-5+32为计算结果,即使它是文本且没有等号,所以他们认为它没有什么价值。但它可以做更多复杂的事情,就像你今天要求的那样。

特别是因为我们现在FORMULATEXT()可以轻松修改工作公式。

相关内容