上楼中REDUCE函数循环思路参考公式如下:
公式简要说明如下:
=DROP( 去掉多余的两行0
REDUCE(
VSTACK(A1:D5, 0), 源数组下方堆积一个0,作为标识
ROW(1:99), 循环足够多次数,超过次数保留x不变
LAMBDA(x, y,
IF(
@x = 0, x顶端是0时保持x不变,不执行后面运算
x,
LET(
x顶端数组高度, MATCH(0, TAKE(x, , 1), ) - 1, 从上到下匹配0的位置
x顶端数组, TAKE(x, x顶端数组高度), 提取出x顶端待处理数组
结果列, DROP(TAKE(x, , 1), x顶端数组高度), 提取出x第一列中0下面的数组,也就是结果堆积的数组
剩余数组, DROP(x顶端数组, 1), 去掉待处理数组的第一行,生成剩余数组
VSTACK(
IFERROR(
SORTBY(TRANSPOSE(剩余数组), -SEQUENCE(COLUMNS(剩余数组))), 将剩余数组逆时针旋转90°堆积在结果列上方
0 如果没有需要处理的数组了,返回0
),
结果列, 堆积上一步的结果列
TOCOL(TAKE(x顶端数组, 1)) 将当前数组的第一行转成列,堆积在上一步的结果列下方
)
)
)
)
),
2
)
|