多组[名称*数量]在一个单元格,根据数量重复名称,一组公式搞定
问题求助SOS:我想要在A2单元格内,不断的新增 产品名称*数量 的组合,在B列实现根据各个产品名称的数量重复产品名称的效果,主管不让用辅助列,直接一个公式能搞定吗?
答案当然是可以的。不过我们需要用到一系列的函数,包括TEXTSPLIT、TEXTJOIN、REPT、TAKE的运用,需要我们有清晰的思路和一定的基础函数知识储备。
如下图所示:
A2单元格为多组[名称*数量],并且每组[名称*数量]之间有明显的间隔符“,”逗号。我们想要在B列实现根据每组产品名称的数量,重复对应名称的效果。
并且,当我们在A2单元格中,删除[名称*数量],新增[名称*数量],或更改[名称*数量]时,B列的结果会实现一个动态实时的更新。如下图那样:
话不多说,我们直接进入步骤的演示。
第一步:拆分
使用经典的TEXTSPLIT函数:
=TEXTSPLIT(A2,"*",",")
同时使用第2参数列分隔符“*”与第3参数行分隔符号“,”,实现列与行的同时拆分(分列与分行)。
第二步:提取产品列与数量列
使用TAKE函数:
=TAKE(TEXTSPLIT(A2,"*",","),,1)
TAKE函数的作用是从数据的开头或结尾中提取指定数量的连续行或列,这个函数一般不会单独使用,都是配合其他函数来使用的。
基本语法:
TAKE(数据区域, 行数,列数)
所以我们提取到上一步返回数组溢出结果的第1列产品列。
同样的步骤:
=TAKE(TEXTSPLIT(A2,"*",","),,-1)
提取到上一步返回数组溢出结果的倒数第1列数量列。
第三步:根据数量重复产品
使用经典的REPT函数:
=REPT(TAKE(TEXTSPLIT(A2,"*",","),,1),TAKE(TEXTSPLIT(A2,"*",","),,-1))
REPT函数主要用于按照指定的次数重复显示文本。
基本语法:
REPT(要重复显示的文本,重复显示的次数)
原C列的辅助列为提取到的数量列,即“重复显示的次数”,作为REPT函数的第2参数,原B列的公式为提取到的产品名称,即“要重复显示的文本”,作为REPT函数的第1参数。
公式重新整理完成后,C列的辅助列就可以删除了。
截止到上一步,虽然我们想要的结果雏形已基本形成,但是最终的一列数据的效果仍没有出现,所以我们需要做最后的结构化处理。
第四步:结构化处理
我们使用&连接符号:
=REPT(TAKE(TEXTSPLIT(A2,"*",","),,1)&",",TAKE(TEXTSPLIT(A2,"*",","),,-1))
在REPT第一参数:需要重复的文本,后面&连接一个“,”逗号。
这样最终重复的数据格式就变为N组“产品名称,”(名称+逗号)。
利用TEXTJOIN函数合并:
=TEXTJOIN(,,REPT(TAKE(TEXTSPLIT(A2,"*",","),,1)&",",TAKE(TEXTSPLIT(A2,"*",","),,-1)))
将上一步的返回结果直接合并,不需要使用第一参数分隔符,因为我们在上一步的REPT处理过程中已经加上了逗号。
利用TEXTSPLIT函数拆分行:
=TEXTSPLIT(TEXTJOIN(,,REPT(TAKE(TEXTSPLIT(A2,"*",","),,1)&",",TAKE(TEXTSPLIT(A2,"*",","),,-1))),,",",TRUE)
将上一步合并至一个单元格中的数据,根据行分隔符“,”逗号,进行拆分行,注意设置一下第四参数:TRUE(跳过空单元格后拆分)。