PMC表格模型12:开工日期与完工日期判断模型
优秀创作者
全文约1700字
大家好,我是古老师,专注于PMC(生产计划与控制)领域的教学。今天我们要介绍的是PMC系列中的第12个表格模型——开工与完工日期判断模型。
此模型适用于在编制二维生产计划时,动态判断每个订单的预计开工日和完工日的情况。例如,在《生产计划月度排程表》中,A列为订单编号,D1:G1为水平方向的日期(如1月1日、2日、3日等),而交错区域则表示对应订单的排程数量。我们的目标是在B列和C列录入公式,以动态显示A列各订单的排程开工日与完工日,并且这些信息会根据D列到G列排程数量的变化自动更新。
这种方法的优点在于,即使水平方向的排程跨越了多个屏幕(比如超过30天),我们也能轻松查看每张订单的开工与完工时间,无需滚动屏幕查找。这样不仅提高了工作效率,还减少了因手动操作可能引起的错误。
传统公式
古老师的表格模型会根据不同版本的表格设计相应的公式。对于旧版本的表格,我们将使用传统公式进行编制。继续以上述案例为例,在B列和C列分别输入开工日期和完工日期的公式,并将其填充到相应的位置:
B2=MIN(IF(D2:G2>0,$D$1:$G$1))
C2=MAX(IF(D2:G2>0,$D$1:$G$1))
公式解释:
开工日期公式:此公式通过查找D2到G2范围内第一个非零值对应的日期来确定订单的预计开工日。它检查D2到G2范围内的数值,若大于0,则返回对应的日期,并用 MIN 函数找到这些日期中的最小值,即最早的开工日期。
完工日期公式:此公式通过查找D2到G2范围内最后一个非零值对应的日期来确定订单的预计完工日。它检查D2到G2范围内的数值,若大于0,则返回对应的日期,并用 MAX 函数找到这些日期中的最大值,即最晚的完工日期。
这两个公式结合使用,可以根据排程数量的变化自动更新订单的开工与完工日期。
动态数组
传统公式的劣势
传统公式的劣势在于用户需要手动填充公式,并且必须锁定单元格区域(如$D$1:$G$1)。相比之下,动态数组公式则不需要这些操作,使用起来更加简便。
将传统公式改为动态数组公式的核心思路之一是使用动态数组函数,如BYROW 或 BYCOL 等。这样可以在 B2 和 C2 单元格中直接输入动态数组公式,实现一键填充:
B2=BYROW(IF(D2:G9>0,D1:G1),MIN)
C2=BYROW(IF(D2:G9>0,D1:G1),MAX)
公式解释:
这个公式的原理与传统公式基本一致,核心在于使用BYROW 函数。此函数可以对 D2:G9 范围内的每个值进行批量处理,判断是否大于 0。然后,它会对符合条件的日期(即 D1:G1 范围内的日期)进行最值判断(使用 MIN 和 MAX),从而得到最小日期和最大日期,分别对应订单的开工日期和完工日期。
具体来说:
开工日期:通过BYROW(IF(D2:G9>0, D1:G1), MIN) 批量判断 D2:G9 范围内大于 0 的值,并找到对应的最小日期。
完工日期:通过BYROW(IF(D2:G9>0, D1:G1), MAX) 批量判断 D2:G9 范围内大于 0 的值,并找到对应的最大日期。
这种方法简化了操作步骤,无需手动填充或锁定单元格区域,使计算更加高效和准确。
动态扩展
虽然上述动态数组公式可以实现一键填充,但当数据增加时,仍需手动修改动态数组的引用参数以扩展单元格区域。为了实现完全动态扩展,可以在公式中提前预留参数中的单元格区域扩展。将B2 和 C2 单元格的动态数组公式更改为以下内容:
B2=TAKE(BYROW(IF(D2:L18>0,D1:L1),MIN),COUNTA(A2:A18))
C2=TAKE(BYROW(IF(D2:L18>0,D1:L1),MAX),COUNTA(A2:A18))
公式解释:
这些公式的架构与之前的动态数组公式相似,主要改进是扩大了参数范围,并使用TAKE 函数结合统计函数来动态确定边界范围。例如,区域 D2:L18 和水平方向 D1:L1 可以根据需要预留扩展范围。这样,公式能自动适应数据量的变化,无需手动调整引用范围,使操作更简便灵活。这两个公式确保在数据增加时,仍能准确计算订单的开工和完工日期。
通用公式
上面的公式是基于最小值和最大值来判断开工与完工日期,当水平方向是文本的时候,此动态数组公式不适用了,所以也可以升级为通用公式,也就是同时适合文本与数值的模型的公式。将B2 和 C2 单元格的动态数组公式更改为以下内容:
B2=TOCOL(BYROW(IF(D2:N25>0,D1:N1,A),LAMBDA(X,TAKE(TOROW(X,3),,1))),3)
C2=TOCOL(BYROW(IF(D2:N25>0,D1:N1,A),LAMBDA(X,TAKE(TOROW(X,3),,-1))),3)
公式解释:
开工日期:检查D2 到 N25 范围内的每个数值是否大于 0,如果是,则返回对应的日期(即 D1 到 N1 范围内的日期),否则返回列 A 的值(强制错误)。BYROW函数对每一行进行处理,使用 TOROW 函数将数据转置成单行,参数3强制屏蔽错误,并用 TAKE 函数提取第一个非空值(即最早的开工日期)。
完工日期:这个公式的工作原理类似,区别在于它使用 TAKE(..., , -1) 提取最后一个非空值(即最晚的完工日期)。
通过这种方式,公式能够适应文本和数值混合的数据,确保在任何情况下都能准确计算订单的开工日期和完工日期,而无需手动调整引用范围,使操作更加简便和灵活。
文章视频与文章文件:
【金山文档 | WPS云文档】 652 PMC表格模型12:开工日期与完工日期判断模型