昨天说到把任务号进行一键分拆,分拆后的效果如下图所示,为了实现分拆后的任务数量自动分配,还需要继续写公式。先把任务号重复项次的次数标记出来,也就是如果任务出现多次,就进行连续编号。

举例说明:WK-1分拆了4张任务号,编号就是1、2、3、4,这样的编号的目的是为了和任务号连接在一起形成一个唯一的数值,这也是有重复项经常用到的一个思路。

因为J3这里是用动态数组写的公式,所以继续利用这个思路,把函数SCAN+LAMBDA的组合继续使用,这里录入公式:


【资料图】

=SCAN(0,J3#,LAMBDA(X,Y,(Y=OFFSET(Y,-1,))*X+1)),就可以实现一键为任务号编号。

函数释义:就是当WK-1与上面的单元格对比的结果乘X,第1个X是0,然后根据这个结果多次累加运算,以WK-1为案例说明:

第1次,此时X为0, WK-01与任务对比,返回结果0,0*0+1,返回1

第2次,此时X为1,就是第1次的结果,WK-1与WK-1对比,返回结果1*1+1,返回2,此时X为2

第3次,此时X为2,就是第2次的结果,WK-1与WK-1对比,返回结果1*2+1,返回3,此时X为3

第4次,此时X为3,就是第3次的结果,WK-1与WK-1对比,返回结果1*3+1,返回4,此时X为4

重点观察第5次

第5次,此时X4,就是第4次的结果,WK-2与WK-1对比,返回结果0*4+1,返回1,此时X为1,可以发现X重置为1了。

所以SCAN 函数就是这样一次一次“递归”运算,并把运算结果的过程一步一步记录下来了。

最后一步就是分配任务数量,分配任务数量的逻辑是这样的,需要判断尾数,这里默认尾数就是序号中最大的数量,如果满足任务号数字最大就返回尾数,否则就返回分拆订单数量。

这里还有一个BUG就是尾数中出现0的话,也需要返回分拆订单数量,这样才能实现分拆后的任务数量与分拆前的任务数量完全一致。

写这样多层的函数需要一层一层写,这样才能避免逻辑混乱

第一个判断:

=IF(XLOOKUP(J3#,B:B,G:G)=I3#,XLOOKUP(J3#,B:B,F:F),XLOOKUP(J3#,B:B,E:E)),得到如下图结果,可以看到BUG就是0,也就是没有尾数的会出现问题。

此时就要把结果为0的继续返回分拆订单数量,如果直接引用这个函数结果,公式就会特别长,此时引用LET函数,把上面的结果定义名称为A,再次录入函数:

=LET(A,IF(XLOOKUP(J3#,B:B,G:G)=I3#,XLOOKUP(J3#,B:B,F:F),XLOOKUP(J3#,B:B,E:E)),IF(A=0,XLOOKUP(J3#,B:B,E:E),A))

就实现了一键分拆,全自动生成。


关键词: