昨天分享了在Excel中按需求自动分拆工单的方法,这个方法就是把表1的工单分解成多张工单,只能是平均分配,因为没有考虑有尾数,实际情况是会有尾数的,如3500,分解成3张1000的工单,和一张500的余数工单;
今天就分享如果需要按整数和余数来分拆工单的函数方法, VBA当然可以,但是学习成本高,需要有代码能力,而且源数据发生变化时候,不懂代码很难修改;

其实写完就觉得太长了公式,这里只做研究讨论,如能够简化函数公式的请回复,公式如下:
=IF(MOD(SEQUENCE((COUNTA(A:A)-1)*MAX(E:E))-1,MAX(E:E))+1<=VLOOKUP(INDEX(A:A,INT((SEQUENCE((COUNTA(A:A)-1)*MAX(E:E))-1)/MAX(E:E)+1)+1),A:E,5,0),IF(VLOOKUP(INDEX(A:A,INT((SEQUENCE((COUNTA(A:A)-1)*MAX(E:E))-1)/MAX(E:E)+1)+1),A:D,4,0)<>0,IF(MOD(SEQUENCE((COUNTA(A:A)-1)*MAX(E:E))-1,MAX(E:E))+1
思考方向
看上面的公式可能会比较晕,分解后的思路如下:
1. 判断没有尾数的订单;
2. 过滤多余工单数
3. 判断余数的最后位置,因为尾数一定在最后
4. 通过两层IF再次判断;
5. 通过筛选函数自动分拆;
最后分享公式:
1. F6=COUNTA(A:A)-1
2. G6=MAX(E:E)
3. H6=SEQUENCE(F6*G6)-1
4. I6=H6#/G6+1
5. J6=INT(I6#)
6. K6=INDEX(A:A,J6#+1)
7. L6=INT((SEQUENCE(F6*G6)-1)/G6+1)
8. M6=MOD(SEQUENCE(F6*G6)-1,G6)+1
9. N6=VLOOKUP(K6#,A:E,5,0)
10. O6=M6#<=N6#
11. P6=IF(O6#,VLOOKUP(K6,A:C,3,0),"")
12. Q6=VLOOKUP(K6#,A:D,4,0)<>0
13. R6=M6#
14. S6=IF(R6#,VLOOKUP(K6#,A:D,3,0),VLOOKUP(K6#,A:D,4,0))
15. T6=IF(Q6#,S6#,VLOOKUP(K6#,A:C,3,0))
16. U6=IF(O6#,T6#,"")

我是古哥:
从事制造行业18年,在企业运营、供应链管理、智能制造系统等方面具有丰富的实战经验。企业智能化,柔性化计划运营管理专家,擅长通过企业流程优化规范,企业管理、导入计划运营提升企业效率;对提高企业准时交货率,降低企业库存,输出智能制造人才有丰富的经验。学习PMC生产计划,关注古哥计划!