73 “动态数组”用法详解(八) -选择行列CHOOSECOLS函数
今天继续分享动态数组专属函数系列行列数组函数系列之选择行列。选择行列这个函数原来没有发现他们的特殊之处,一直到有一天需要把常规公式更改为动态数组后,才发现这个函数的优秀之处。
老规矩,还是看语法,再看案例和使用场景。
CHOOSECOLS函数
函数的定义为:包含要在新数组中返回的列的数组;
函数的语法:=CHOOSECOLS(array,col_num1,[col_num2],…)
通俗的说法:选中多列后,录入对应的列号,就返回对应的列。
分别录入以下函数就可以很直观的知道这个函数的基本用法了。
B9=CHOOSECOLS(B2:E7,1),选择第一列;
D9=CHOOSECOLS(B2:E7,2,4),选择第二列和第四列;
G2=CHOOSECOLS(B2:E7,{1,3,4})选择多列的不同写法,这里注意用的大刮号的写法;
案例1:数据自动整理
场景;有时候从ERP导出的数据会非常多列,有很多列都是生产计划员不需要的,再或者是自己建模建立好的标准,别人发过来的数据,行列又不一样了,这样复制数据的时候就会错列,无法完美对齐。
如下图,列数非常多,需要的数据有的在第2列,有的在第6列,还有的可能在第8列,需要快速整理,简化报表。
对于以上的数据,用到选择列函数就非常简单了,只需要知道对应的列号,就可以快速选择了,先确定以下基本表对的列号:
{"下单日期","任务号","装配件","任务状态","单位","任务数量","完工数量","生产部门","评审交期"},这个表头对应的列号可以人工数,也可以用MATCH函数去判断,录入函数
=MATCH(A1:I1,'1.复制离散任务'!1:1,0),得到一个数字数组:{2,9,12,10,5,14,15,16,7},这个就是上面对应源数据的列号,只需要放到选择列号的第二参数就可以了,录入函数
=CHOOSECOLS('1.复制离散任务'!A2:R30000,MATCH(A1:I1,'1.复制离散任务'!1:1,0)),就可以得到标准化报表的结果。
上面的数据会有问题,就是范围选择比较大的情况,下面会出现0,如何把0过滤掉呢?
案例2:配合筛选函数过滤无效数据
场景:有时候建模的时候,因为源数据是变量,所以一般会预留足够多的行以防止数据过大,超出原先设定的引用范围(FILTER函数参数选择整列A:A,建模的时候,数据运算量非常大,会非常卡)。
当设定的范围过大,数据不哆的时候,没有数据的就会显示为0,造成数据不是最佳的。此时选择函数加上筛选函数就非常好的完成这个问题了。
为了让公式简单一点,先用LET函数把刚刚选择函数的结果设定为A,A代表刚才的结果。
CHOOSECOLS(A,1)<>0,表示选择A的第1列中不等于0作为FILTER函数的条件,录入函数FILTER(A,CHOOSECOLS(A,1)<>0),就把0的筛选出去了,最后合并公式:
=LET(A,CHOOSECOLS('1.复制离散任务'!A2:R30000,MATCH(A1:I1,'1.复制离散任务'!1:1,0)),FILTER(A,CHOOSECOLS(A,1)<>0))
我是古哥:
从事制造行业18年,在企业运营、供应链管理、智能制造系统等方面具有丰富的实战经验。企业智能化,柔性化计划运营管理专家,擅长通过企业流程优化规范,企业管理、导入计划运营提升企业效率;对提高企业准时交货率,降低企业库存,输出智能制造人才有丰富的经验。学习PMC生产计划,关注古哥计划!