如何使用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确认