如果一列数据有变化如何让另一列重新生成序列?
如下图所示,如何让B列数据随着A列内数据的变化而重新生成序列呢?比如,都为同一产品A时,型号会按顺序生成A001~A004;而当出现产品B时,型号又会重新生成新的序列B001(如图的第6行);同理的,当出现了产品C时,型号又会重新生成新的序列C001(如图的第11行);当出现产品D时,型号又会重新生成新的序号D001(如图的第15行)。
要达到这样的效果,B列的公式应该怎么写呢?
首先我们要对某产品出现的重复次数进行计算。比如,当“产品A”第1次出现时,就应该是1;第2次出现时,其重复次数,就应该是2;第3次出现时,就应该是3,以此类推。
所以,要用到COUNTIF条件计数函数。
公式为:
=COUNTIF($A$2:A2,A2)
这个公式,统计的是,相应单元格在A2单元格到公式所在的动态范围中,等于A2单元格内容本身的,出现的次数。如果等于1,说明当前产品是第一次出现,如果大于1,则说明该产品在当前单元格上方部分已经出现过。
通过上一步的COUNTIF条件计数,我们已经得到了1,2,3,4,5….的序号。那么,如何让这样的序号变成类似“A001”的样式呢?
要让其显示形式发生改变,就要用到文本格式化函数TEXT。好,我们就在COUNTIF公式外面,再嵌套一个TEXT函数,将其显示格式设置为RIGHT(A2,1)&”000″的样式,也就是说,从“产品”列里用RIGHT函数提取其产品名称,然后再连接”000″的样式。公式为:
=TEXT(COUNTIF($A$2:A2,A2),RIGHT(A2,1)&"000")
但是,当我们把公式往下进行填充时,却发现会出错,只有产品A,返回来的型号是正确的。
所以,我们要转换一下思路:既然不能直接用TEXT函数来转换,那么,类似“A001”的样式,我们还可以用文本连接函数来进行连接。如,“A001”可以由“A”与“001”连接而来。
“A”,我们可以通过RIGHT函数,从“产品”列中进行提取;而“001”的样式,我们可以通过TEXT函数,将前边通过COUNTIF函数获取到的序号进行转化而来。
所以,最终公式为:
=CONCAT(RIGHT(A2,1),TEXT(COUNTIF($A$2:A2,A2),"000"))
即用CONCAT函数,将从“产品”列提取到的产品名称,以及转换后的序号,进行了连接。结果如下图,达到了需求。
总结:
- 条件计数函数countif,可以用来统计重复性次数
- 文本格式化函数text,可以将数值转换为指定格式的文本样式
- 如果不能直接用text函数进行转换,还可以用到文本连接函数来将几部分进行连接使显示格式符合所需。