在 Excel 中使用另一个单元格的值作为引用中的行号

在 Excel 中使用另一个单元格的值作为引用中的行号

我希望能够将表格粘贴到工作表中,然后计算每行之间的值差。但是表格的长度未知,所以我希望差值计算的行数自动更新为输入的新表格的长度。

我能够使用计数函数来获取表的长度,但是我不确定如何使用计算的长度来调整计算差异的行范围。

答案1

=INDIRECT(...)将获取参数值(文本/字符串)并将其用作单元格引用或范围。

答案2

如果我正确理解了您想要实现的目标,那么您似乎正在寻找一个根据数据大小自动溢出的公式。假设您的值存储在范围内A1:A6(请参阅下面的示例数据),您可以组合VSTACK()INDEX()和,SEQUENCE()如下所示(公式在单元格中B2;输出在下表中):

=VSTACK("",
INDEX(A:A,SEQUENCE(COUNTA(A:A)-2,,2))-
INDEX(A:A,SEQUENCE(COUNTA(A:A)-2,,3)))

首先,VSTACK()只需要将最终结果移动一行,前提是您不计算第一个值的差值,因为上面的值是“col_a”。第一个INDEX()andSEQUENCE()组合用于获取从第一个值到第 n-1 个值的所有值,即下表中的值 5 到 12。col_a第二个INDEX()andSEQUENCE()组合用于获取从第二个值到最后一个值的所有值,即下表中的值 9 到 4 col_a

INDEX()函数非常简单,只是根据指定的行/列返回指定范围内的值。因此,在您的情况下,您想要返回范围中的值A:A。在这种情况下,棘手的部分是动态性质,因为您想要根据输入数据的大小返回行。因此,我们使用一个COUNTA()语句来计算指定范围内非空单元格的数量。根据下面指定的数据,将=COUNTA(A:A)返回值 6。此值用于创建一个序列,特别是指定我们要在序列中使用的行数。假设我们有一个标题,并且不想分别包含最后一行(第一行)的值,我们需要将这个数字减少 2。此外,我们希望序列从第 2 行(3)开始以排除标题和第一个值(对于第二个序列)。因此,第一个=SEQUENCE(COUNTA(A:A)-2,,2)语句将返回以下数组{2;3;4;5}。这些正是我们想要在语句中返回的行INDEX()

结合这些语句,您将得到下表中指定的连续行之间的差异diff_a。对于第一种情况,它将是 ,5-9 = -4依此类推。

如果您现在在 A 列中添加/删除数据点,则存储在单元格中的公式B2将自动溢出到数据的相应数组中。请注意,这假设 A 列仅包含您真正用于计算的值。如果该列包含以下其他值或表格,则会扰乱函数的计算COUNTA()

数据和结果:

可乐 diff_a
5
9 -4
10 -1
12 -2
4 8

相关内容