57

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

4

2 回答 2

75

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

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

=A:A*B:B

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

于 2013-07-11T13:25:45.310 回答
55

一种方法是使用=INDIRECT函数。然后有几种方法可以解决这个问题(加上奖金,如下):

=间接,A1B1 表示法

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

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

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

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

=间接,R1C1 表示法

选项 2=INDIRECT是使用“相对”引用,使用所谓的“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()

(旁注:我发现这个使用=INDIRECT的描述有助于提出上述内容。


$A$1 – 锚定参考(奖金)

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

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

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

于 2017-09-01T22:16:47.410 回答