PMC生产计划自动排程全动态数组设计-5
优秀创作者
全文约800字
大家好,我是古老师。今天继续设计PMC生产计划自动排程全动态数组的表格第5章,在第4章中完成了MPS主生产计划的无限开工与无限完工的公式字段设计,目前这些字段是以辅助列的形式存放在单元格区域,今天的设计目标就是MPS主生计划表自动排程需要的一些关键约束的辅助列创建字段。
本次思路总结
今天为了拆解这个复杂的动态公式,进度如下,SCAN的第1次用法,用在累计工时上面,XLOOKUP的第1次用法,在查找引用工作日历上面,DROP的2次用法,用在错位辅助比较的方案上。
引用日历工时
创建工作日历的目的就是为了控制排程内日期每天的出勤时间,这里前期已经把工作日历分为当月、下月的录入工作表,只需要在这些工作表录入工厂实际的出勤工时就可以汇总到总工作日历上。
汇总完后就可以用查找引用函数引用过来。这里水平方向的排程日期是动态数组,所以就实现了全动态数组引用:
=XLOOKUP(I3#,日历.输出!A2#,日历.输出!E2#)
累计出勤工时
继续创建辅助的字段,累计出勤时间,也就是按工时直接累计上去,如第1天出勤8小时,第2天出勤8小时的话,累计就是8、16这样,录入公式:
=HSTACK(I3,I3+SCAN(0,I1#,SUM)/24)
公式解释:
通过SCAN函数进行累加计算,是相对最高效的,可以直接用省略LAMBDA函数的写法进行直接简写,录入一个函数SUM就可以累计求和了。除24是转换成和工作日历一样的工时唯度;
错位去头去尾
接下来继续创建这个累计出勤工时的辅助列,也就是针对这个数组进行去头去尾,通过错位来保证数组一致,从而让后续与无限开工与完工进行逻辑判断。
=DROP(I2#,,1)
=DROP(I2#,,-1)
公式解释:
错位对比,是一个比较经典的思路,通过DROP函数去除第1列和最后1列。