4月16日更新了简单的自动排程辅助公式:
=IF($I2-SUM($S2:S2)>$R2,$R2,$I2-SUM($S2:S2))
来复习一下此公式的逻辑思路 :重点为动态引用,所以要理解美元符号在Excel中的锁定关系:
- 行列不锁定:A1 填充公式时:列变化,行变化 :向下:A2,向右B1;
- 行列绝对锁定: $A$1 填充公式时:列不变,行不变 :向下:A1,向右A1;
- 行锁定列不锁定:A$1 填充公式列时:列变化,行不变:向下A1,向右B1
- 列锁定行不锁定:$A1 填充公式:列不变,行变化;向下A2,向右A1
记住:美元符号在谁前面,谁就不变;
再配合工作日历引用,确定不用开工日期:
=IF(VLOOKUP(T$1,工作日历!$A:$C,3,0)=0,0,IF($I2-SUM($S2:S2)>$R2,$R2,$I2-SUM($S2:S2)))
最终效果:
新来的朋友可以点击下面从头开始:
设计第二行思路
如果把昨天设计好的公式向下向右填充可以发现,每次的开工日期都是4月1日,效果如下:
明显可以看出第二行是不对的,最终想要的效果是第二行的排程接着第一行的完工日开始排程,或者在完工日第二天开始排程
所以需要解解决的问题是:如何让Excel表格知道第一行排完后,第二行接着排程?
上图中观察发现,只要把第二行的单元格对应的日期与第一行的完工日期作动态逻辑判断就可以实现第二行的排程接着第一行的完工日开始排程,当然这里肯定有BUG,先试试
条件是:当第二行的日期小于第一行的完工日期就显示为0
=IF(T$1<$K2,0,1) ,这里1是写公式经常用的套路,就是多层嵌套时的临时方案,因为等下要返回上面第一行的公式向下填充的结果,所以我们只需要把这公式先复制到其它地方,备用,等公式填充下来,再复制回去就可以了
把第一行的公式向下填充得到:
=IF(VLOOKUP(T$1,工作日历!$A:$C,3,0)=0,0,IF($I3-SUM($S3:S3)>$R3,$R3,$I3-SUM($S3:S3)))
再把这个公式替换数字1得到(注意等号不要复制):
=IF(T$1<$K2,0,IF(VLOOKUP(T$1,工作日历!$A:$C,3,0)=0,0,IF($I3-SUM($S3:S3)>$R3,$R3,$I3-SUM($S3:S3))))
效果如下:
看起来是我要的效果,但是也存在BUG,就是没有考虑超出产能了,如上图
我们将公式更改为:
强制换天,还是不行,负荷又小了,所以只能手工调整了……
设计公式时不要怕BUG,先设计再思考如何实现,当然用VBA编程当然可以,对于大部分来说,比较难,公式函数是比较容易上手的,当然也可以说直接用公式的信息化实现,这是非常对的,现实情况是:
信息化的逻辑谁来提供?软件工程师需要非常熟悉产品工艺或排程方法论,才能设计也来,所以我们用 Excel 是用来建模的,不是为了后续都用Excel,是用Excel锻炼我们的逻辑思维能力,然后配合信息化,最终实现数字化工厂。
明天的公式太过于复杂,是否需要古哥继续讲了?留言告诉我
=IF(AND(SUM(J$2:J2/$F$2:$F2)>0,SUM(J$2:J2/$F$2:$F2)<1,(1-SUM(J$2:J2/$F$2:$F2))*$F3<$D3),(1-SUM(J$2:J2/$F$2:$F2))*$F3,IF(J$1<$H2,0,IF(VLOOKUP(J$1,'1. 工作日历'!$A:$C,3,0)=0,0,IF($D3-SUM($I3:I3)>$F3,$F3,$D3-SUM($I3:I3)))))
上述公式已经解决了上面的BUG
我是古哥:
从事制造行业18年,在企业运营、供应链管理、智能制造系统等方面具有丰富的实战经验。企业智能化,柔性化计划运营管理专家,擅长通过企业流程优化规范,企业管理、导入计划运营提升企业效率;对提高企业准时交货率,降低企业库存,输出智能智造人才有丰富的经验。关注我,每日分享制造行业,特别是生产计划方面的一些职场干货。
如若转载,请注明出处:https://www.moshi6.com/65628.html