想象一下,我有几个(即> 100个)数字列向量。矢量很大,长度相等(例如20k项)。向量不相邻,因此它们不构成矩阵。
我想要的是用矢量进行一些行计算,例如
对于每一行,所有向量中的第一个非零值是什么?
或
对于每一行,所有向量中的最大值是什么?
参见这个简化的例子,它应该得到所有向量的最大值,对于所有行都是3(实际上显示的值是1):
如果我可以将向量复制为矩阵并获取跨越给定行的所有向量而不是列范围的行范围列,那将很容易。但由于数据的大小,这不是选项。我认为这与其他SO问题有关:Is it possible to have array as an argument to INDIRECT(), so INDIRECT() returns array?。
答案 0 :(得分:2)
您可以使用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
答案 1 :(得分:-1)
我发现您实际上可以从INDIRECT()
返回一个数组。
但是必须使用"R1C1"
语法,并且不能使用公式(而不是使用"R" & ROW() & "C" & COLUMN()"
之类的公式来创建R1C1语法。
您必须输入“ ROW&COLUMN”(行和列)数字作为绝对数字,然后它才能起作用。
当{}
或ROW()
函数返回数字时,显然excel将COLUMN()
放在数字的周围,我想这就是它不起作用的原因(尝试调试,您会看到)。