二维码 购物车
部落窝在线教育欢迎您!

用正则函数快速拆分单元格中的同类数据

 

作者:ITFANS来源:部落窝教育发布时间:2024-11-27 19:17:01点击:133

分享到:
0
收藏    收藏人气:0人
版权说明: 原创作品,禁止转载。

编按:

本文介绍古法、新法、正则法拆分单元格中的同类数据,并以正则函数法为主。

 

今天再说说单元格中同类数据的拆分或提取。

先从简单的开始,拆分同一类数据。

1.拆分姓名到多列

 

 

古法:

经典的空格替换提取法,适合所有版本。

=TRIM(MID(SUBSTITUTE(SUBSTITUTE($A2,"、",REPT(" ",99)),",",REPT(" ",99)),COLUMN(A1)*99-98,99))

 

 

新法:

较新版本和最新版本都适合。

=TEXTSPLIT(A2,{"、",","})

 

 

正则法:

最新版本适合。

WPS表格:

=REGEXP(A2,"[^、,]+")

Excel表格:

=REGEXEXTRACT(A2,"[^、,]+",1)

 

 

解释:

正则表达式"[^、,]+",表示不含顿号和逗号的字符串。

WPS正则函数默认提取所有符合条件的值;而Excel正则函数默认提取符合条件的第一个值,只有第3参数设置为1才提取所有符合的值。

 

2.拆分姓名到单列

古法:

=TRIM(MID(SUBSTITUTE(SUBSTITUTE(CONCAT($A$2:$A$4&"、"),"、",REPT(" ",99)),",",REPT(" ",99)),ROW(A1)*99-98,
99))

 

 

提醒:由于单元格最多能容纳的字符数约32000,所以CONCAT法不适合数据量大的组合与拆分。

 

新法:

=TEXTSPLIT(CONCAT(A7:A9&"、"),,{"、",","})

 

 

正则法:

WPS表格:

=TOCOL(REDUCE(,REGEXP(A7:A9,"[^、,]+",3),VSTACK),3)

Excel表格:

=TRANSPOSE(REGEXEXTRACT(CONCAT(A7:A9&"、"),"[^、,]+",1))

 



 

解释:

1)

WPS正则函数匹配模式3,表示完整提取。当第1参数是数组,第2参数每段正则表达式都匹配多个值的时候,使用完整提取模式搭配REDUCE或者MAP等LAMBDA伴侣函数可以提取所有结果。

Excel正则函数没有完整提取模式,所以此处用CONCAT函数将A7:A9合并成一个值。如果不合并,则需要将正则放入LAMBDA中,如“=TRANSPOSE(DROP(REDUCE("",A7:A9,LAMBDA(x,y,HSTACK(x,REGEXEXTRACT(y,"[^、,]+",1)))),,1))”。

2)

此处WPS使用了REDUCE函数语法糖简写。完整的写法是“=TOCOL(REDUCE(,REGEXP(A7:A9,"[^、,]+",3),LAMBDA(X,Y,

VSTACK(X,IFNA(Y,"")))),3)”。

 

再来看一个复杂的,拆分多种同类数据。

1.拆分系列、货号等成多列

如下表A列,同一单元格中包括了相同系列的多个子系列数据。现在需要依次将子系列名(包含系列名,如“22G原封机(灰色)”)、货号(如“grey001”)和销量(如“900”)拆分出来。

 

 

古法、新法,大家可以自己写写,这里只给出正则法。

WPS表格:

正则第2参数不用数组:

=TOROW(VSTACK(LEFT(A2,3)& REGEXP(A2,".{5}色")&")",REGEXP(A2,"[A-z0-9]+(?=))"),--REGEXP(A2,"(?<=))

[0-9]+")),,1)

 

 

正则第2参数用数组:

=TOROW(REDUCE(,REGEXP(SUBSTITUTE(SUBSTITUTE(A2,"原"," "&LEFT(A2,3)&"原"),"色","色)"),{".{8}色)","[A-z0-9]+(?=))","(?<=))[0-9]+"},3),VSTACK),,1)

 

 

公式解释:

① ".{5}色"".{8}色)",表示提取5个或8个字符外加“色”或“色)的字符串。

② "[A-z0-9]+(?=))",“(?=))”表示在右括号前,“[A-z0-9]+”表示由字母、数字组合的字符串,两者合起来就表示提取右括号前的字母和数字,如货号“grey001”。

③ "(?<=))[0-9]+",“(?<=))”表示在右括号后,“[0-9]+”表示数字组成的字符串,两者合起来就是提取右括号后的数字,如销量“900”。

 

2.拆分系列、货号等成单列

正则第2参数不用数组:

=WRAPROWS(DROP(REDUCE("",A2:A5,LAMBDA(x,y,HSTACK(x,TOROW(VSTACK(LEFT(y,3)& REGEXP(y,".{5}色")&")",
REGEXP(y,"[A-z0-9]+(?=))"),--REGEXP(y,"(?<=))[0-9]+")),,1)))),,1),3)

 

 

2参数用数组:

=SORT(WRAPROWS(TOROW(REDUCE(,REGEXP(SUBSTITUTE(SUBSTITUTE(A2:A5,"原"," "&LEFT(A2:A5,3)&"原"),"色","色)"),{".{8}色)","[A-z0-9]+(?=))","(?<=))[0-9]+"},3),VSTACK),3,1),3))

 

 

大家可以自己写写Excel表格正则提取公式。

 

本文配套的练习课件请添加客服微信buluowojiaoyu索取。

Excel高手,快速提升工作效率,部落窝教育Excel精品好课任你选择

扫下方二维码关注公众号,可随时随地学习Excel:

相关推荐:

批量拆分单元格内容变成多行显示的3种方法

正则函数REGEXP用法

如何理解和使用REDUCE函数?

99个空格来提取单元格数据

版权申明:

本文作者ITFANS;部落窝教育享有稿件专有使用权。若需转载请联系部落窝教育。