从这里的文章开始,并根据数组中空值的观察和允许不同大小的数组进行更新,我们可以得到两个公式,您应该能够将其翻译为用于“堆叠”和“搁置”数组的Named LAMBDA
函数。
堆叠数组
=LET(rngA, A1:C5, rngB, A9:D11,
rowsA, ROWS(rngA), rowsB, ROWS(rngB),
NumCols, MAX(COLUMNS(rngA), COLUMNS(rngB)),
SeqRow, SEQUENCE(rowsA + rowsB), SeqCol, SEQUENCE(1, NumCols),
Result, IF(SeqRow <= rowsA, INDEX(IF(rngA="","",rngA), SeqRow, SeqCol),
INDEX(IF(rngB="","",rngB), SeqRow-rowsA, SeqCol)),
arr, IFERROR(Result,""), arr)
存储数组
=LET(rngA, A1:C5, rngB, B8:D12,
colsA, COLUMNS(rngA), colsB, COLUMNS(rngB),
NumRows, MAX(ROWS(rngA), ROWS(rngB)),
SeqRow, SEQUENCE(NumRows), SeqCol, SEQUENCE(1, colsA + colsB),
Result, IF(SeqCol <= colsA, INDEX(IF(rngA="","",rngA), SeqRow, SeqCol),
INDEX(IF(rngB="","",rngB), SeqRow, SeqCol-colsA ) ),
arr, IFERROR(Result,""), arr)
一旦您拥有一个连续的数组,您可以应用您已经有的公式:
更新为使用溢出范围以便于测试...
=LET(data, A1#,
rows, ROWS(data), cols, COLUMNS(data),
seq, SEQUENCE(rows*cols,,0),
list, INDEX(IF(data="", "", data), QUOTIENT(seq, cols)+1, MOD(seq, cols)+1),
FILTER(list, LEN(list)>0))
这种方法真正适用于命名的LAMBDA
函数,否则你将会得到庞大的公式,其他方法在这种情况下可能更好。
list, INDEX(X,CEILING(Z/Y,1),MOD(Z-1,Y)+1), IF(LEN(list) = 0,"", list)
替换INDEX(X,CEILING(Z/Y,1),MOD(Z-1,Y)+1)
应该可以工作。 - TragamorCHOOSE()
会将空值更改为零。因此,我们需要在源处处理空单元格。请参见编辑。 - JvdV