假设我们想在 Excel 中根据一行值和一列值(或标签)创建一个矩阵。多年来,编写单个公式来填充该矩阵的方法是编写绝对列引用和绝对行引用(例如
=$A1+B$1
)并填充矩阵。例如,像这样。
对于静态矩阵,这非常有效。现在,借助 Excel 365,我们拥有一系列可以创建动态序列和数组的数组公式。假设矩阵由行和列的两个动态序列定义,如下所示,并且其维度可以更改。像以前一样复制并粘贴公式意味着每次维度更改时,都必须手动将公式复制并粘贴到新位置以填充新矩阵。这是此类动态矩阵的示例。
有没有一种方法可以重现用一个使用数组公式的公式用行和列值之和填充矩阵的原始方法,以便在行尺寸或列尺寸发生变化时,该公式将自动填充整个矩阵?
我认为这个公式很可能不需要将行和列输入布置在单元格中,它们可以作为数组输入提供给它 - 但如果不需要,它仍然是我寻求的解决方案。
我尝试了
=MAKEARRAY(row, col, lambda(r, c, f(r,c)) )
,但无法弄清楚如何将数组传递给 lambda 进行迭代。
好的,经过几天的尝试,我找到了解决方案。不是很漂亮,但很工作。
对于数学运算符
+ - * / ^ ()
溢出 (#) 参考可以解决这个问题:
=A2#*B1#
一些固定公式还可以采用溢出 (#) 输入并生成数组:
=PMT(A2#/100,B1#,1000,0)
有些不能。例如。
=MAX(A2#,B1#)
只会返回单个最大值。
但是,仍然可以制定解决方法。
=MAKEARRAY(COUNT(A2#),COUNT(B1#),LAMBDA(row,col,MAX(INDEX(A2#,row),INDEX(B1#,1,col))))
一步一步:
=COUNT(A2#) =COUNT(B1#)
返回行和列动态范围的长度=MAKEARRAY(COUNT(A2#),COUNT(B1#),LAMBDA())
生成这些维度的矩形动态数组LAMBDA(row,col,MAX(row,col))))
将行索引和列索引作为前两个 required 输入,并将它们传递给 MAX()
公式INDEX(A2#,row),INDEX(B1#,1,col)
再次获取行和列数组并返回与MAX()
处理的索引匹配的值。例如,
row=1
转换为 1
,column=1
变为 10
。 MAX(1,10) 将 10
返回到 LAMBDA()
,并且 MAKEARRAY(1,1,LAMBDA())
在位置 1,1
处用 10
填充数组。重复此操作,直到完成所有对 row=A2#
和 column=B1#
。
希望这可以帮助其他可能正在寻找此问题解决方案的人。