装箱问题的2个方法。
第一种:每个产品按数量展开,按162个一行分开,然后统计每一行内的产品名称和数量(公式细节未做优化):
- =LET(s,WRAPCOLS(TOCOL(IF(B3:B9>=COLUMN(A:ZZ),A3:A9,\),3),162,0),REDUCE({"规格型号","箱号","数量"},SEQUENCE(,COLUMNS(s)),LAMBDA(x,y,LET(o,INDEX(s,,y),q,UNIQUE(o),p,FILTER(q,q>0),VSTACK(x,HSTACK(p,IF(p>0,y&"号箱"),MAP(p,LAMBDA(z,SUM(N(z=o))))))))))
复制代码
第二种:每个产品按数量展开,然后逐个往箱子(x)里装,如果够了160个就加1个箱子,否则仍然放在原来的箱子里(公式里重复部分未作优化):
- =REDUCE(A16:D16,TOCOL(IF(B2:B7>=COLUMN(A:ZZ),A2:A7,\),3),LAMBDA(x,y,LET(s,TAKE(x,-1),IF(MOD(SUM(TAKE(x,,-1)),160)=0,VSTACK(x,HSTACK(y,VLOOKUP(y,A:B,2,),MAX(INDEX(x,,3))+1,1)),IF(y=@s,VSTACK(DROP(x,-1),IF({1,1,1,0},s,s+1)),VSTACK(x,HSTACK(y,VLOOKUP(y,A:B,2,),MAX(INDEX(x,,3)),1)))))))
复制代码
|