【问题标题】:Getting formula of another cell in target cell获取目标单元格中​​另一个单元格的公式
【发布时间】:2012-02-25 16:20:42
【问题描述】:

一个单元格如何在不使用VBA的情况下将另一个单元格的公式作为文本获取?我可以看到这个问题已经被问过很多次了,答案总是在 VBA 中编写一个自定义函数。

但是,我发现了一个 post made in 2006,它声称找到了非 VBA 解决方案,但该帖子中提供的链接已经损坏。

【问题讨论】:

  • 如果您正在寻找非 VBA 解决方案,这并不是一个真正的编程问题,是吗?我认为应该是superuser 问题。
  • 那篇缺失的帖子似乎指出了一种使用旧 XLM GET.FORMULA() 的方法,但如果您愿意走那么远,您应该只使用常规的 VBA 函数。
  • 不确定 XLM GET.FORMULA() 是什么,但我想我会坚持使用 VBA 方法。
  • @brettdj 我不知道结果会是什么......
  • @TimWilliams - XLM 和 XL4 一样吗?

标签: excel formulas


【解决方案1】:

你不能。这很可能是为了避免普通 Excel 用户意外得到他们不想要的东西的设计选择。

您正在阅读的是正确的 - 编写 UDF 是您想要的解决方案。

【讨论】:

  • 感谢 Issun(Okami?),我想 VBA 是要走的路。
  • 我认为这个答案不正确,我发布了一个替代方案。
  • 使用 XL4 几乎不是我所说的能够使用普通的 excel 公式(没有 VBA)得到它。这就像说“你可以使用 C# 获得公式,所以它不是 VBA!问题的重点更多是关于如何使用普通 Excel 功能(减去 VBA)而不是如何做到这一点不是 使用 VBA。
  • @Issun - 您的解释可能是也可能不是 OP 的意图,我不会保证这两个选项中的任何一个。该问题并未要求“使用普通的 excel 公式”(也许这是意图,或者 S200 可能是为了避免 only VBA)。我只是说发布的问题的答案是“你可以......”同样,使用 C# is 非 VBA 的解决方案,所以我个人认为它是另一个支持“你可以”。您可能已经准确地表述了您回答的问题,这当然是有效的,但不是这种情况。
  • 我没有兴趣讨论这个问题。 OP 已明确将“公式”标签放在问题上,以明确他/她在问什么。有很多“你可以”喜欢打印出来并查看它的方法,使用苹果脚本,使用 C# 等,但即使辩论也是愚蠢的。
【解决方案2】:

在没有 VBA 的情况下有一个很好的方法。它使用 XL4 宏(这些是宏,但不是 VBA,正如所要求的那样)。

参考图 1,单元格 A2:A4 包含常用公式。

  1. 转到公式 -> 定义名称,我定义了两个命名范围(见图 2),信息显示在单元格 A6:B8 中。

  2. 在单元格 B2 中输入 =FormulaAsText。这会将单元格 A2 中的公式作为文本检索。

    说明: 命名范围FormulaAsText 使用=GET.CELL(info_type,reference)。在这种情况下,ìnfo_type = 6 检索公式,reference = OFFSET(INDIRECT("RC",FALSE),0,-1) 使用与使用公式的单元格偏移 0 行和 -1 列的单元格。

  3. 复制 B2 并粘贴到 B3:B4 中。这将在 A3:A4 中显示公式。单元格 A4 显示工作表函数 CELL 只检索值,而不是公式(与 GET.CELL 相反)。

  4. 由于FormulaAsText 从当前的固定偏移量 (0,-1) 的单元格中获取公式,我定义了另一个范围 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


编辑:作为this nice answer 的补充,工作表函数FormulaText 可用于for Excel 2013 及更高版本

【讨论】:

    【解决方案3】:

    =FormulaText(Reference) 可以解决问题Documentation

    【讨论】:

    • 能否提供文档链接?
    • 这就是答案。谢谢!
    • 不知道他们何时引入了 FormulaText 函数,但它似乎在 Excel2013 中有效。正是我需要的...谢谢!
    • Excel 2010 中不存在。
    【解决方案4】:

    有办法做到这一点。在我的示例中,我有一个显示日期的表格。日期来自 Sheet!G91。在我的表格中,我还有一列显示工作表名称。我在表中又添加了两列。第一列有 column(Sheet!g91),它返回数字 7,因为 G 是字母表中的第七个字母。然后,我使用工作簿中的另一个表格将数字转换为字母 (G)。在我添加的第二列中,我创建了一个公式行(Sheet!G91),它返回数字 91。注意:行和列可能显示为易变公式,每次计算工作簿时都会重新计算。

    我想要另一列显示本文开头提到的日期单元格的公式内容。我包含了以下字符串函数(您也可以使用 CONCATENATE)。

    "=" & AJ9 & "!" & AM9 & AN9

    由 & 号分隔的项目串在一起(即串联)。我的示例中的 AJ9 包含工作表名称,AM9 包含列字母,AN9 包含行号。

    我现在有一列可以动态更新其内容以反映工作表名称和单元格引用。我的工作簿单元格中的结果是

    =Sheet!G91。

    【讨论】:

    • 这种方法通常不适用于公式,但我认为这是问题所要求的。
    【解决方案5】:

    对于那些在检索到公式块并将它们传输到新电子表格后想要再次使用它们的人来说,此建议可能会有所帮助。 Excels FORMULATEXT 函数非常适合提取公式,但它会使它们成为不可用的文本字符串。如果您想将它们恢复为功能齐全的公式,您必须单独编辑每个公式以删除字符串字符,但这是较大块的快捷方式。 到达您将所需公式作为文本的位置(换句话说,在使用 FORMULATEXT 之后 - 您已完成复制和(仅值)粘贴)。下一步涉及突出显示要转换的所有单元格,然后导航到 [Text-To-Columns] 菜单选项(Excel 2016 上的 {Data} 栏)。您可以选择“分隔”,但在下一个屏幕上,只需确保取消选择出现在公式中的任何标记。然后“完成”。 Excel 应该会自动将单元格分析为包含公式,您现在应该让它们再次工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多