我想为电子表格中的每一行计算两个不同列(例如A& B)的乘积。对于单行,这可以通过使用=PRODUCT(A1:B1)
来工作,但我无法弄清楚如何使该函数使用当前行而不是手动输入的行。我知道您可以使用ROW()
获取对当前行的引用,但是当我尝试PRODUCT(AROW():BROW())
之类的内容时出现错误。
答案 0 :(得分:49)
如果您将引用的公式复制到另一行,或使用Ctrl + D将其填充,它将自动更改对您要复制/填充的行的引用。这被称为“相对参考”。如果您使用公式=PRODUCT($A$1:$B$1)
,则称为“绝对引用”,如果复制到别处,则不会更改。
您还可以在任何行中使用以下公式:
=A:A*B:B
将返回调用公式的行中两个值的乘积。
答案 1 :(得分:20)
执行此操作的一种方法是使用=INDIRECT功能。有几种方法可以解决这个问题(加上下面的奖金):
选项1使用=ROW()
函数(和=CONCAT
连接列和行名称),如您所述,在这种情况下可能如下所示:
=INDIRECT(CONCAT("A", ROW())) * INDIRECT(CONCAT("B", ROW()))
(注意:我使用的是x * y
而不是=PRODUCT(x, y)
,因为只有两个因素,它在答案中似乎更具可读性。)
如果您在第3行执行此操作,则会有效地提出A3 * B3
作为公式。
带=INDIRECT
的选项2是使用“相对”引用,使用所谓的“R1C1表示法”。通过将FALSE
传递给=INDIRECT
的(可选)第二个参数来访问此表示法,并具有两种基本形式:
R1C1
始终引用A1
(第一行,第一列),R3C2
始终引用B3
(第三行行,第二行列 - 请注意,行和列的顺序与B3
表示法相反。只要参考文件显示在工作表上,它们就会成立(它们将始终分别解析为A1
和B3
。)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
有助于提出上述内容。
最后,值得注意的是,可以使用$
修饰符引用固定列和/或行。通常,在将公式复制/粘贴到其他单元格时,列和行引用会根据移动量而变化:将=A1
的引用从C2
复制到E3
会得到{{{ 1}}(A变为C,因为引用向右移动了两列; 1变为2,因为它向下移动了1行)。 =C2
表示法锚定了这些引用中的一个或两个。
E.g。如果您在单元格$
中有=$A1
的引用,然后将其复制到C1
,它将变为C2
。这非常普遍,因为=$A2
也会复制到=A1
。但是,如果您现在从=A2
复制到C2
(向下一行并且一列正确),它将变为D3
,仍然已锚定到A列,仍然更改行号。因此,如果从第63行(任意示例)的任何列放置公式=$A3
,则可以将其复制/粘贴到电子表格中的任何其他单元格,并将它乘以行的列A和B中的值你粘贴了。 (我认为这可能是你想要做的?)
(另请注意:您可以对行引用执行相同操作 - =$A63 * $B63
始终为行=A$1
,但1
可以更改; A
将无论你把它引用到哪里,总是=$A$1
。)