一个单元格如何在不使用VBA的情况下将另一个单元格的公式作为文本获取?我可以看到这个问题已经被问过很多次了,答案总是在 VBA 中编写一个自定义函数。
但是,我发现2006 年发表的一篇文章声称找到了非 VBA 解决方案,但该文章中提供的链接已经损坏。
=FormulaText(Reference)
会做的伎俩文档
没有 VBA 有很好的方法。它使用 XL4 宏(这些是宏,但不是 VBA,如所要求的)。
参考图 1,单元格 A2:A4 包含常用公式。
转到公式 -> 定义名称,我定义了两个命名范围(见图 2),信息显示在单元格 A6:B8 中。
在单元格 B2 中输入=FormulaAsText
。这将检索单元格 A2 中的公式作为文本。
说明:命名范围FormulaAsText
使用=GET.CELL(info_type,reference)
. 在这种情况下,ìnfo_type = 6
检索公式,并reference = OFFSET(INDIRECT("RC",FALSE),0,-1)
使用从使用公式的单元格偏移 0 行和 -1 列的单元格。
复制 B2 并粘贴到 B3:B4。这将在 A3:A4 中显示公式。单元格 A4 显示工作表函数CELL
只检索值,而不是公式(而不是GET.CELL
)。
由于FormulaAsText
从当前固定偏移量 (0,-1) 的单元格中获取公式,因此我定义了另一个 range FormulaAsText2
,它使用从工作表本身读取的偏移量 (rows,cols)。单元格 D2:D4 包含=FormulaAsText2
. 因此,单元格 D2 显示单元格 B3 ( =OffSET(D2,1,-2)
) 的内容,即FormulaAsText
。单元格 D3:D4 显示自己的内容。这增加了一些灵活性。YMMV。
PS1:精华摘自 http://www.mrexcel.com/forum/excel-questions/20611-info-only-get-cell-arguments.html
PS2:Tim Williams 在评论“旧 XLM GET.FORMULA()
”中提到。这个答案可能是相关的(不一样,因为这个使用GET.CELL()
)。
PS3:给出了一个简单的 VBA 解决方案,例如,在 http://dmcritchie.mvps.org/excel/formula.htm
编辑:补充这个不错的答案,工作表功能FormulaText
可用于 Excel 2013及更高版本。
有一种方法可以做到这一点。在我的示例中,我有一个显示日期的表格。日期来自 Sheet!G91。在我的表格中,我还有一个显示工作表名称的列。我在表中又添加了两列。第一列有 column(Sheet!g91),它返回数字 7,因为 G 是字母表中的第七个字母。然后,我使用工作簿中的另一个表格将数字转换为字母 (G)。在我添加的第二列中,我创建了一个公式行(Sheet!G91),它返回数字 91。注意:行和列可能显示为易变公式,每次计算工作簿时都会重新计算。
我想要另一列显示本文开头提到的日期单元格的公式内容。我包含了以下字符串函数(您也可以使用 CONCATENATE)。
"=" & AJ9 & "!" & AM9 & AN9
由 & 号分隔的项目串在一起(即连接)。在我的示例中,AJ9 包含工作表名称,AM9 包含列字母,AN9 包含行号。
我现在有一列可以动态更新其内容以反映工作表名称和单元格引用。我的工作簿单元格中的结果是
=表!G91。
对于那些在检索公式块并将它们传输到新电子表格后希望再次使用它们的人,此建议可能会有所帮助。Excels FORMULATEXT 函数非常适合提取公式,但它会将它们保留为不可用的文本字符串。如果您想将它们恢复为功能齐全的公式,您必须单独编辑每个公式以删除字符串字符,但这是较大块的快捷方式。到达您将所需公式作为文本的位置(换句话说,在使用 FORMULATEXT 之后 - 您已经完成了复制和(仅值)粘贴)。下一步涉及突出显示要转换的所有单元格,然后导航到 [Text-To-Columns] 菜单选项(Excel 2016 上的 {Data} 栏)。您可以选择“分隔” 但在下一个屏幕上,只需确保取消选择公式中出现的任何标记。然后“完成”。Excel 应自动将单元格分析为包含公式,您现在应该让它们再次工作。
你不能。这很可能是一种设计选择,可以避免普通 Excel 用户意外得到他们不想要的东西。
您正在阅读的是正确的 - 编写 UDF 是您想要的解决方案。