如何使用INDEX()嵌套数组计算?

想象一下,我有几个(即> 100)数列向量。 向量大,长度相等(例如20k项)。 vector不是相邻的,所以它们不构成matrix。

我想要的是,例如,获取一些向量的行计算

对于每一行,什么是所有向量中的第一个非零值?

要么

对于每一行,什么是所有向量中的最大值?

看到这个简单的例子,应该得到所有向量的最大值,对于所有行将是3(实际上显示的值是1):

在这里输入图像说明

这很容易,如果我可以将vector复制为matrix,并获得横跨给定行的所有vector而不是列范围的行范围的列。 但由于数据的大小,这不是选项。 我认为这是相关的其他SO问题: 有可能有数组作为INDIRECT()的参数,所以INDIRECT()返回数组? 。

您可以使用CHOOSE将相同大小的列组合到一个范围内,例如对于您的3范围示例:

=CHOOSE({1,2,3},$B$1:$B$4,$B$5:$B$8,$A$3:$A$6)

然后直接在公式中使用它,例如在G2中复制下来,以获得每行的MAX

=MAX(INDEX(CHOOSE({1,2,3},$B$1:$B$4,$B$5:$B$8,$A$3:$A$6),F2,0))

或者您可以将CHOOSE部分定义为命名范围[如果您有100个范围,则特别有用],例如命名为Matrix并使用

=MAX(INDEX(Matrix,F2,0))

您需要根据范围数量修改{1,2,3}部分,以便在您可以使用100个范围时进行快捷操作

=CHOOSE(TRANSPOSE(ROW(INDIRECT("1:100"))),Range1, Range2.....Range100)

现在需要使用CTRL + SHIFT + ENTER进行确认

要获得第一个非零值,你可以使用这个版本

=INDEX(INDEX(Matrix,F2,0),MATCH(TRUE,INDEX(Matrix,F2,0)<>0,0))

也用CTRL + SHIFT + ENTER确认