=LET(a,IF(B2:M2<>"",$B$1:$M$1,""),FILTER(a,a<>""))
=TOROW(IF(B2:M2<>"",$B$1:$M$1,N),3)
IF(OFFSET(y,,1,,12)<>"",$B$1:$M$1,N)
这一步跟上面两种方法的思路一样,公式也略长,现略写为大写的M。
下一步就是剔除错误错了,TOROW(M,3)
接下来就是要把姓名和上一步的结果进行横向接连,那么公式就是:
HSTACK(y,TOROW(M,3))
以上只是遍历单元格A2时的运算,然后要将每一步遍历运算的结果进行纵向拼接,公式就是:
VSTACK(x,HSTACK(y,TOROW(M,3)))
整个公式就是:
=LET(a,
REDUCE("",A2:A5,LAMBDA(x,y,VSTACK(x,HSTACK(y,TOROW(M,3))))),
IFERROR(DROP(a,1),""))
最后面加了DROP是因为要把第一行去掉(累加器的起始值为空),加IFERROR是要把错误值用空值代替。将M代替关键的公式之后,上述公式的整体结构还是比较清楚的。完整的公式就是:
=LET(a,
REDUCE("",A2:A5,LAMBDA(x,y,
VSTACK(x,HSTACK(y,TOROW(IF(OFFSET(y,,1,,12)<>"",$B$1:$M$1,N),3))))),
IFERROR(DROP(a,1),""))

