如图A列至G列为源数据,如何生成I列至K列的个人成绩单,公式如下:
=DROP(REDUCE("",TOCOL(A2:A10,1),LAMBDA(x,y,VSTACK(x,LET(
array,LOOKUP(ROW(A2:A10),ROW(A2:A10)/(A2:A10<>""),A2:A10),
subject,{"语文";"英语";"数学"},
fil,DROP(REDUCE("",subject,LAMBDA(m,n,VSTACK(m,IFERROR(TEXTJOIN(",",1,FILTER(OFFSET(A2:A10,,XMATCH(n,B1:G1),,2),array=y)),"")))),1),
sum,DROP(REDUCE("",subject,LAMBDA(s,t,VSTACK(s,SUM(FILTER(OFFSET(A2:A10,,XMATCH(t,B1:G1) 1),array=y))))),1),
IFERROR(VSTACK(HSTACK("","成绩单",""),HSTACK("姓名",y),{"学科","扣分情况","扣分合计"},HSTACK(subject,fil,sum),""),""))
))),1)
公式思路:本例公式主题:reduce(vstack(iferror……,核心是iferror部分生成的表单。
iferror部分用vstack拓展高度,用hstack拓展宽度。
公式特色部分是对offset和filter的组合使用,完成了数据提取列的选择。
评论 (0)