|
=LET(信息表,信息表!A2:C894,订单表,TRIMRANGE(订单表!A2:L99999),学生午餐订单表,FILTER(订单表,(INDEX(订单表,,4)="学生")*(INDEX(订单表,,12)="午餐")),必须订单,CHOOSECOLS(学生午餐订单表,1,2,3,6),就餐学生身份证,INDEX(必须订单,,2),订单班级,XLOOKUP(就餐学生身份证,INDEX(信息表,,2),INDEX(信息表,,3),,0),就餐日期,TEXT(INDEX(必须订单,,1),"m月d日"),学生午餐明细,HSTACK(就餐日期,就餐学生身份证,INDEX(必须订单,,3),订单班级),订单透视表,DROP(GROUPBY(HSTACK(就餐日期,订单班级),HSTACK(INDEX(必须订单,,3),INDEX(必须订单,,4)*1),HSTACK(COUNTA,SUM),0,0,2),1),应到人数,GROUPBY(INDEX(信息表,,3),INDEX(信息表,,2),COUNTA,0,0,1),当日当班应到人数,XLOOKUP(INDEX(订单透视表,,2),INDEX(应到人数,,1),INDEX(应到人数,,2),,0),最终表,HSTACK(INDEX(订单透视表,,1),INDEX(订单透视表,,2),当日当班应到人数,INDEX(订单透视表,,3),INDEX(订单透视表,,4)),未就餐名单,BYROW(最终表,LAMBDA(行,LET(当前日期,INDEX(行,1),当前班级,INDEX(行,2),班级所有学生,FILTER(CHOOSECOLS(信息表,1,2),INDEX(信息表,,3)=当前班级),已就餐学生,FILTER(INDEX(学生午餐明细,,3),(INDEX(学生午餐明细,,1)=当前日期)*(INDEX(学生午餐明细,,4)=当前班级)),未就餐学生,FILTER(INDEX(班级所有学生,,1),NOT(ISNUMBER(XMATCH(INDEX(班级所有学生,,1),已就餐学生)))),名单文本,当前日期&":"&未就餐学生,TEXTJOIN("、",TRUE,名单文本)))),IFERROR(HSTACK(最终表,未就餐名单),""))已经符合需求,如果要能在进行优化性能,简化公式就好了,自定义名称还是用中文好,我一个英语盲才能看懂。 |