一种方法是使用=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 的(可选)第二个参数来访问此表示法,它有两种基本形式:
- 通过其绝对位置引用另一个单元格,例如
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 有助于提出上述建议。
$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,无论如何你把它的引用放在哪里。)