问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

古法、新法、正则法,快速拆分单元格同类数据

创作时间:
作者:
@小白创作中心

古法、新法、正则法,快速拆分单元格同类数据

引用
1
来源
1.
http://www.360doc.com/content/24/1128/21/72182290_1140673741.shtml

在Excel数据处理中,经常会遇到需要将单元格中的同类数据拆分到多列或单列的情况。本文将介绍三种方法:古法、新法和正则法,帮助读者快速掌握这一技能。

拆分姓名到多列

古法

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

=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才提取所有符合的值。

拆分姓名到单列

古法

=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)”。

拆分系列、货号等成多列

如下表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参数不用数组:

=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表格正则提取公式。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号