【问题标题】:In LibreOffice Calc, how can one sheet get the result of a named cell on another sheet whose name depends on a cell value on the first sheet?在 LibreOffice Calc 中,一个工作表如何获取另一个工作表上的命名单元格的结果,该工作表的名称取决于第一个工作表上的单元格值?
【发布时间】:2021-03-20 03:19:55
【问题描述】:

我有一个包含 13 张表格的电子表格:一份年度总结和 12 张辅助表格。这十二张支持纸中的每一张都有小节,每个小节都有一个小计。摘要表需要从每个小节中提取每个月的小计。以随机的间隔,将在小计中插入行,这将改变小计的值,以及该小计在工作表中的绝对位置。

子问题 1:为每个部分创建小计。 定义为在当前填充的范围内使用 =SUM 的单元格。 估计解决了。

子问题 2:命名包含子问题结果的单元格,以便在主工作表中不使用绝对位置。 通过命名包含“=SUM”公式的单元格来处理,并给它们命名,如“RedSubtotal”、“BlueSubtotal”,范围仅限于该特定工作表。换句话说,在多个工作表上使用相同的确切字符串/名称,只要它们都在其托管工作表范围内,就不应该出现冲突。 假定已解决,但我想知道。

子问题 3:在摘要(年)表上,从月表中获取命名值。为避免大量繁琐的输入,由于工作表的名称与它们所代表的月份相同,并且摘要表的左侧列有这些名称,因此尝试了以下操作:

(主工作表单元格 A2 恰好具有值“March”,不包括此上下文中的引号。)

然后将主表单元格 B2 设置为这个确切的字符序列:

=INDIRECT($A2 & ".RedSubtotal")

预计这将评估为以下确切的内部字符串:

March.RedSubtotal

反过来,我认为应该在内部这样做:

  1. 找到名为“March”的工作表并输入该上下文。
  2. 在该上下文中,找到名为“RedSubtotal”的符号并对其进行评估。
  3. 发现 RedSubtotal 计算结果为 $H$32 的单元格,从 March.$H$32 获取数据。
  4. 发现 March.$H$32 的计算结果为 =SUM(H28:H31),在 March 表的上下文中执行该总和 - 即,添加使用 March 的数据而不是 Main 指定的单元格范围 -并返回结果(整数)
  5. 显示主表单元格 B2 中返回的整数。

获得的结果是“#REF!”错误,但可能还有一个更基本的错误。

如果我将测试单元设置为这个精确的手动输入的字节序列:

=March.RedSubtotal

我得到了预期的结果。

如果我改为尝试这个精确的手动输入字节序列:

=INDIRECT("March.RedSubtotal")

我收到 #REF 错误。

我非常怀疑这一点。有人知道这里发生了什么吗?

我知道文件格式精神分裂症中的整个 dot 与 bang 的白痴,所以请耐心等待,并明确说明您针对什么上下文/设置/名词/任何内容提出的确切顺序。在这一点上我需要的最后一件事是格式大战,我只是想找到能按预期解决问题的方法,而无需对单元格编号进行硬编码。

【问题讨论】:

  • 抱歉,我找不到更紧凑的方式来讨论这个问题。从概念上讲,这似乎是一件非常简单的事情,但它失败了。结果,我只好详细尸检。
  • 随着人们变得聪明并解决问题,请记住:这里的主要目标是避免在另一张纸上引用明确的单元格地址。理想情况下,假设主工作表甚至无法访问这些单元格,只能访问在命名单元格中执行的函数的结果。

标签: libreoffice-calc


【解决方案1】:

INDIRECT 采用 R1C1 或 A1 格式的字符串。它不接受命名的单元格范围字符串。

这是您可以做的一件事。创建一个名为“名称”的工作表。在该表上,添加以下内容:

Name                 Location
~~~~                 ~~~~~~~~
March.RedSubtotal    =CELL("address";$March.$H$32)
March.BlueSubtotal   =CELL("address";$March.$I$32)

您可以选择从位置列中获取名称列中的工作表名称。

=MID(B2;2;SEARCH(".";B2)-2)&".RedSubtotal"

将此表定义为名为“名称”的全局范围。那么主表单元格 B2 的公式为:

=INDIRECT(VLOOKUP(A2&".RedSubtotal";Names;2))

这使主工作表上的公式相对简单。此外,如果在 March 表上插入新行,Names 表上的 CELL 公式将进行调整。

如果您不喜欢这个解决方案,因为它需要引用 Names 表中的每张表,然后问自己这个问题:您想抽象掉这个问题的哪一部分?一种不同的抽象方式是在每个月表上创建一个名称表。但是,您需要指定要使用的表。

最后,您可能会发现最简单的方法是使用 Main 表中的直接引用。所以对于 B2:

=March.$H$32

当插入新行时,此引用将调整。最大的缺点是它有点难以阅读,需要导航到该位置才能看到它所指的内容。但是因为它很简单,所以应该有点容易维护。

【讨论】:

  • 我正在为您提供支持和要点,以提出一些真正不同的方式来看待问题。不过,最后一个解决方案正是我想要避免的:幻数,而不是明智的、明确的、明确的变量名。虽然我承认在某些情况下这将是最务实的选择,但这些是会计电子表格,这似乎非常脆弱。
  • 我将测试您在这里获得的内容,如果我可以从这些内容构建一个可行的解决方案,我会将您的帖子标记为解决方案,因为我很欣赏你去的努力。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多