日常工作中,经常需要条件指定复制数据,按照Excel的常规操作就是按复制再按粘贴,如果会快捷键的话,就是一遍一遍的按Ctrl+C,Ctrl+V。如果复制的次数比较少,问题也不大,如果复制数据比较多的话,这样操作就比较麻烦了?
举例说明,下图中的生产任务需要下发给不同车间生产,因为工单量大,所以需要多车间多线体生产,此时排程就涉及到分配生产任务到不同的班组,因为系统的任务没有分拆,所以同一张生产任务存在着多班组,多车间生产。手动复制太麻烦了,如果用公式实现下图效果应该如何操作呢?(为了方便操作,把源数据和复制数放在一张表上面了。
找到规律
根据上图的结果,如果需要设计公式的话,首先想到就是找到规律,并判断哪些条件是定量,哪些条件是变量,特别是变量,当变量发生的时候是否能够自动判断。
变量1:表1中的源数据,也就是待复制区域,可能是4行,也可能是5行。
变量2:复制次数,可能是3次,也可能是5次(3条线同时生产就是复制3次,4条件生产就是复制4次。
定量1:表1源数据的列是固定的
定量2:当表1的源数据确定了行数后,内容就是固定的了,只需要不断的重复行和列就行了。
动态判断源数据的行
动态判断行的方法就是用统计函数COUNTA,这个函数就是统计数据区域中非空单元格的个数。
录入函数=COUNTA(B:B),得到结果:4行
有了行的话,需要再次判断复制次数后的总行数,录入计算式=C2*H2,得到数字12,有了这个数字就可以判断复制3次后的总行数是12。
注意,这里是是没空行的,如果需要预留空行,就需要在上面的返回4行的结果中再加1,把函数变更成=COUNTA(B:B)+1,对应的总行数就是15。
生成重复的数字序号
复制的本质就是不断的重复1到5行,也就是需要生成一组数据如12345,12345,12345……的循环数,生成这样的数其实就是数学知识,只需要记住以下固定公式就可以了。
录入函数:=MOD((SEQUENCE(D2))-1,C2)+1,为了方便理解,这里没有合并公式,如需要合并公式,可以更改为:
=MOD((SEQUENCE((COUNTA(B:B)+1)*I2))-1,COUNTA(B:B)+1)+1
因为列是固定的,所以只需要录入函数SEQUENCE(,4),就可以生成1,2,3,4的数据组。
INDEX返回对应的重复数据
有了上面的行号和列号,配合上INDEX函数引用就实现了标题中的根据条件指定复制数据的目的。INDEX函数,第一参数就是源数据,需要绝对锁定,第二参数是是行参数,第三参数是列参数,所以录入以下函数:
=INDEX($B$3:$E$21,MOD((SEQUENCE((COUNTA(B:B)+1)*I2))-1,COUNTA(B:B)+1)+1,SEQUENCE(,4))
就自动重复了数据了。
因为复制源数据的行是变量,所以INDEX的第一参数的范围可以拉大一点,这就就相当于变量当定量了。
测试一下复制多次
验证公式的最佳方法就是更改变量,看一下是否能够返回正确的结果。把数据更改一下,复制10次,效果如下图所示:
可以看到,已经达到想要的结果了。公式没有问题,建模完成。
我是古哥:
从事制造行业18年,在企业运营、供应链管理、智能制造系统等方面具有丰富的实战经验。企业智能化,柔性化计划运营管理专家,擅长通过企业流程优化规范,企业管理、导入计划运营提升企业效率;对提高企业准时交货率,降低企业库存,输出智能制造人才有丰富的经验。学习PMC生产计划,关注古哥计划!