问题描述
我想计算B1:1行与B2:2,B3:3,...的标量积,并将结果放在A列中。我的数据可以有空单元格,并且都在列中增长和行,因此,我想找到一个不需要手动将公式应用于每个新数据条目的解决方案。
我当前的解决方案在数学上可以满足我的要求。但是,只要工作表中的行数多于列数,则仅针对列数计算结果,其余行保持空白。
=ARRAYFORMULA(TRANSPOSE(MMULT(N(B1:1),N(TRANSPOSE(INDIRECT(CELL("address",B2)&":"&COLUMNS(2:2)))))))
现在可以添加空列,但是如何解决这个问题而又不必一直添加额外的列?
解决方法
你说
我想计算B1:1行与B2:2,B3:3,...的标量积,并将结果放在A列中。...而不必一直添加额外的列?
在公式中使用 max(arrayformula(if(B:B<>"",row(B:B),"")))
而不是COLUMNS(2:2)
您的新公式将
=ARRAYFORMULA(TRANSPOSE(MMULT(N(B1:1),N(TRANSPOSE(INDIRECT(CELL("address",B2)&":"&max(arrayformula(if(B:B<>"","")))))))))
有用的代码段
如何查找列中的最后一个非空行号
=max(arrayformula(if(B:B<>"","")))
给出{strong>列B
中最后一个非空行的行号,
编辑
请使用以下公式进行MMULT 任意数量的行或列
仅基于2个单元格:B1
和B2
(更改后的公式(由mz1000中的this comment给出)
=ARRAYFORMULA(TRANSPOSE(MMULT(N(B1:1),B2)&":"&max(arrayformula(
if(INDIRECT(CELL("address",B2)&":"&ROWS(B:B))<>"",row(INDIRECT(CELL("address",B2)&":"&ROWS(B:B))),"")))))))))