【问题标题】:Google Spreadsheet Formula to Use Current Row in Function谷歌电子表格公式在函数中使用当前行
【发布时间】:2013-07-11 02:43:48
【问题描述】:

我想为我的电子表格上的每一行计算两个不同列(例如 A 和 B)的乘积。对于单行,这可以通过使用=PRODUCT(A1:B1) 来工作,但我不知道如何让函数使用当前行而不是手动输入的行。我知道您可以使用ROW() 获取对当前行的引用,但是当我尝试使用PRODUCT(AROW():BROW()) 之类的内容时出现错误。

【问题讨论】:

  • 这个问题可能不在本论坛的范围内,但我还是会继续回答。

标签: google-sheets


【解决方案1】:

如果您将引用的公式复制到另一行,或使用 Ctrl+D 将其填充,它将自动更改对您正在复制/填充的行的引用。这称为“相对参考”。如果使用公式=PRODUCT($A$1:$B$1),这称为“绝对引用”,复制到别处不会改变。

您还可以在任意行中使用以下公式:

=A:A*B:B

这将返回调用公式的行中两个值的乘积。

【讨论】:

  • 这实际上是指给定列中的第一个单元格,而不是当前行的单元格。
  • @DissidentRage,你说的“这个”是什么意思?
  • 在那种情况下,我无法复制您所说的内容。 C5 中的=A:A*B:B 将返回 A5*B5。
  • 这没有回答他的问题。他问如何引用当前行。不是如何将两列相乘。将两列相乘是最终目标。
  • @Alex =A:A*B:B 公式不会“将两列相乘”。它将两个单元格组合在一起;放置公式的同一行中的两个单元格。没有乘法的一个更简单的例子是 =A:A。当它放在 B6 中时,它将返回 A6。当放置在 B7 中时,它将返回 A7。它将始终引用当前行。所以我不明白我怎么没有回答这个问题(除了不能很好地传达答案!)。
【解决方案2】:

一种方法是使用=INDIRECT 函数。然后有几种方法可以解决这个问题(下面还有一个奖励):

=间接,A1B1 表示法

选项 1 使用 =ROW() 函数(和 =CONCAT 连接列名和行名),正如您所提到的,在这种情况下可能如下所示:

=INDIRECT(CONCAT("A", ROW())) * INDIRECT(CONCAT("B", ROW()))

(注意:我使用的是x * y 而不是=PRODUCT(x, y),因为它在答案中似乎更具可读性,仅考虑两个因素。)

如果您在第 3 行执行此操作,它将有效地得出 A3 * B3 作为公式。

=间接,R1C1 表示法

=INDIRECT 的选项 2 是使用“相对”引用,使用所谓的“R1C1 表示法”。通过将FALSE 传递给=INDIRECT 的(可选)第二个参数来访问此表示法,它有两种基本形式:

  1. 通过其绝对位置引用另一个单元格,例如R1C1 始终指代A1(第一行,第一列),R3C2 始终指代B3(第三,第二 - 请注意行和列的顺序与B3 符号相反)。无论引用出现在工作表上的何处,这些都适用(它们始终分别解析为 A1B3)。
  2. 相对于当前单元格的位置,以R[1]C[1] 为例,表示1 向下行,1 向右行。基本上,这是相同的表示法,除了您将数字放在括号中以引用特定单元格远离当前单元格的行数和列数(正数向下和向右)是。 R[1]C[1] 指的是1 向下的行,1 右侧的列,R[0]C[-1] 指的是当前行0 没有变化),1 列向左(负数分别向上代表行,向左代表列,而不是向下和向右)。

这两种形式可以结合使用——行的绝对形式,列的相对形式,反之亦然。因此,如果您想将 A 列中当前行的值乘以 B 列当前行的值,您可以使用:

=INDIRECT("R[0]C1", FALSE) * INDIRECT("R[0]C2", FALSE)

这总是会给你你能想到的(但不是表达=AROW() * BROW()

(旁注:我发现this description of using =INDIRECT 有助于提出上述建议。


$A$1 – 锚定引用(奖励)

最后,可能值得注意的是,可以使用$ 修饰符来引用固定的列和/或行。通常,当将公式复制/粘贴到其他单元格时,列和行引用会根据移动量而变化:将=A1 的引用从C2 复制到E3 会得到=C2(A 变为C,因为引用向右移动了两列;1 变为 2,因为它向下移动了 1 行)。 $ 表示法锚定其中一个或两个引用。

例如如果您在单元格C1 中引用了=$A1,然后将其复制到C2,它将变为=$A2。这是正常的,因为=A1 也会复制到=A2。但是,如果您现在从C2 复制到D3(下一行右一列),它将变为=$A3,仍然锚定到A列,并且仍然更改行号。因此,如果从第 63 行(任意示例)的任何列中输入公式 =$A63 * $B63,然后您可以将其复制/粘贴到电子表格上的任何其他单元格,它会将您粘贴的行的 A 列和 B 列中的值相乘进入。 (我想这可能是你想要做的?)

(另外:请注意,您可以对行引用执行相同的操作 - =A$1 始终是行 1,但 A 可以更改;=$A$1 将始终是 A1,无论如何你把它的引用放在哪里。)

【讨论】:

  • 感谢您的详细回答@lindes
  • 这是一个很好的答案。我使用它是为了在条件格式公式上使用动态间接引用。 @lindes 解释得很好。
  • 这太丑了。电子表格怎么没有更简洁的解决方案来满足我想象的非常普遍的要求?
  • @mowwwalker:我认为对于最常见的要求,$ 表示法会让大多数人得到他们想要的,这非常简洁,一旦熟悉它,就很容易理解。而=INDIRECT(...) 提供了完全的灵活性,可以做任何想做的事情。对我来说似乎相当干净。如果您有更好的想法,可以随时向 Google 或 Microsoft 的人员提出建议。
  • 关于 CONCAT 语法的大错误:CONCAT("A", ROW()) --> CONCAT("A"; ROW()) 它是; (不是,)
猜你喜欢
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多