REDUCE+LAMBDA循环计算+TEXTSPLIT,按行拆分很简单!
应用场景一:
如下图所示,A2:C2分别为部门、分组、人员名单,由于不便于统计,需要拆分为右侧的表格。
主要思路:
TEXTSPLIT+CHAR(10)按换行符进行拆分,再用HSTACK横向合并数组。
公式:
=HSTACK(A2:B2,TEXTSPLIT(C2,,CHAR(10)))
解析:
TEXTSPLIT(C2,,CHAR(10))表示按换行符对C2单元格人员名单进行拆分,接着用HSTACK合并A2:B2,出现#N/A错误用IFNA去除即可。
公式:
=IFNA(HSTACK(A2:B2,TEXTSPLIT(C2,,CHAR(10))),A2:B2)
最后,用VSTACK添加表头。
公式:
=VSTACK(A1:C1,IFNA(HSTACK(A2:B2,TEXTSPLIT(C2,,CHAR(10))),A2:B2))
应用场景二:
同样的问题,如果有多个这样的部门分组名单需要进行拆分如何处理呢?
并不复杂,有了前面的基础,请出REDUCE+LAMBDA循环计算就可以了。
公式:
=REDUCE(A1:C1,C2:C4,LAMBDA(X,Y,LET(a,OFFSET(Y,,-2,,2),VSTACK(X,IFNA(HSTACK(a,TEXTSPLIT(Y,,CHAR(10))),a)))))
解析:
REDUCE第一参数A1:C1为初始值,在LAMBDA部分为X。
REDUCE第二参数C2:C4为循环遍历的数组,在LAMBDA部分为Y,依次将C2、C3、C4传递到计算表达式进行计算,结果作为新的初始值X。
LET(a,OFFSET(Y,,-2,,2)部分表示将人员名单向左偏移2列,再取2列宽即对应的部门、分组,定义为a,便于更容易理解和维护公式VSTACK(X,IFNA(HSTACK(a,TEXTSPLIT(Y,,CHAR(10))),a))。