全文约1500 字;
阅读时间:约5分钟;
听完时间:约10分钟;
接上文,设计完表1,MPS主生产计划的格式后,接着需要设计表2,也就是主生产计划表中生产任务的用料分析,这张表的格式非常重要,一般情况下,如果有信息化系统的话,如ERP系统,可以直接使用内置的报表固定表头,只需要保留最为核心的几个标题字段即可。没有系统的话,可以直接参考此设计。
用料分析创建一个新的工作表,并将其命名为“用料分析”。在工作表的第一行输入标题“生产任务用料分析表”,并将该标题设置为跨列居中对齐,这样做可以避免合并单元格,从而防止后续公式引用时出现错误。
在第二行的B 列到 K 列分别输入以下标题:“工单”、“产品”、“数量”、“完成数”、“未完成”、“子件”、“定额”、“标准用量”、“实际领用”和“未领用”。为了便于构建公式,这些水平方向的标题字段将被视为固定列。例如,对于某个生产工单中的产品“产品A”,其相应的子件可以标记为 A1、A2、A3、A4 和 A5,表示父件为“A”,而子件共有五个。不同的子件其用量也可能不同,有的定额为 1,有的为 3,还有的仅为 0.2。
子件库存继续设计第3张表,也就是子件库存,用于子件的库存数量确认,新建表3,并命名为“子件库存”;这张表设计只需要注意一点,就是子件的存放库位,这决定了后续引用库存是可以直接引用还需要汇总求和。
如果是唯一库位就可以直接引用,如果一个子件存放多个库位,就需要汇总求和,例如子件A1存放在两个库位,分别为原材料仓和车间A线边仓。此时就需要把两个仓位的库存进行汇总求和后引用。
车间A的线边仓与工单上的已领数量是两个不同的概念。一个是子件的现存量从原材料仓调拨到车间A线边仓上,一个是被领用在需要生产的工单上面了。这点需要特别注意,而不是理解为在线边仓就是被领用了。
表格引用已经设计好了最为核心的三大报表(MPS 主生产计划表、用料分析表、子件库存表),接下来是公式的设计,特别是需要按日计算欠料的公式设计。
为了方便按日计算欠料,我们需要对表1(MPS 主生产计划表)进行一个表格变形转换,以便在表1有数据更新时能够自动扩展。为此,新建一张工作表,并命名为“分解”。
在B1 单元格录入此表的标题“1. 引用 MPS 二维表”,并设置为从 B 列到 K 列的跨列居中。然后,在以下单元格分别录入引用表1数据的公式:
B3: =TOCOL('1.MPS'!B3:B2000, 3)
C3: =TOCOL('1.MPS'!C3:C2000, 3)
D3: =TOCOL('1.MPS'!D3:D2000, 3)
E3: =TAKE('1.MPS'!E3:K2000, ROWS(B3#))
E2: ='1.MPS'!E2#
公式解释:
以上公式使用了TOCOL 函数来将表1的大范围(例如 B3:B2000)转换成一列,同时通过参数 3 来排除无效的空值,从而实现了动态的 1:1 实时引用。这是为了实现当表1的内容更新时能自动同步到此表。预留的范围是大约 2000 行,如果需要增加范围,只需修改公式中的引用范围数即可,比如将 2000 更改为 3000 或更大。
另外,关于E2 单元格中的动态数组公式 E2#=SEQUENCE(,7,TODAY()+1),它生成了一个动态数组,用于扩展表头,以适应未来的日期。
请注意,上述公式中的TODAY() 函数返回今天的日期,因此 SEQUENCE(,7,TODAY()+1) 会生成一个包含从今天开始向后七天的日期序列。
今日小结今天的重点在于将表1中的数据转移到MPS主生产计划表,并实现表4(分解表)对这些数据的自动引用。巧妙地运用了 TOCOL 函数的特性,通过预留一个较大的范围,并使用参数3来屏蔽空值,从而实现了动态的1:1实时引用。
关键公式如下:
=TAKE('1.MPS'!E3:K2000, ROWS(B3#))
这里利用了TAKE 函数的特性,结合 ROWS 函数来判断 B3# 公式返回结果的行数。具体来说,这个公式可以理解为:从表1中 E3:K2000 的范围内选取数据,并保留与 B3# 公式返回结果相同的行数。在这个例子中,B3# 返回的是两行数据,因此 TAKE 函数保留了这两行。
核心公式总结:
TOCOL: 将一个数组转换成一列(垂直方向)。
ROWS: 用来判断数组的行数。
TAKE: 按需求保留数组的行数或列数。