多组[名称*数量]在一个单元格,根据数量重复名称,一组公式搞定

问题求助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(跳过空单元格后拆分)。