Excel情报局
职场联盟Excel
大家好,今天我们来解决这样的一个问题:提取同一单元格混合内容中的名称、销量与单位?REGEXP正则表达式函数的应用比VBA代码还要实用,掌握与运用起来更加大众化!
如下图所示:
A2单元格内为一混合内容样板数据,包含若干组“地区名称:销量及单位”这样规律固定的数据,且不同组别的“地区名称:销量及单位”数据之间用分隔符分号“;”间隔,现在我们想要分别提取并拆分出名称、销量以及单位数据,显示在C:E列,形成一个如C3:E8一维表格式的表格区域。
要想解决这个问题,就要大致了解一下REGEXP函数的基本概念。
REGEXP函数是基于正则表达式,对复杂文本进行匹配、提取和替换的函数。
基本语法结构:
REGEXP(原始字符串,正则表达式,[匹配模式],[替换内容])
匹配模式是可选项,0或忽略表示提取,1表示判断是否包含,2表示替换。
替换内容是可选项,仅在匹配模式为2时有效,用来替换匹配的内容。
首先我们先提取地区名称。
我们输入正则函数REGEXP:
=REGEXP(A2,"[一-龟]{2,}")
[一-龟]表示所有的中文字符;
{2,}表示出现字符2次及以上提取。
因为“单位”数据都是1个字符构成的,比如“套”,“台”等。
所以"[一-龟]{2,}"会提取到除了“单位”以外的所有连续汉字。
REGEXP函数,使用正则表达式"[一-龟]{2,}",可以将A2单元格内的地区名称全部提取出来。
使用TRANSPOSE函数:
=TRANSPOSE(REGEXP(A2,"[一-龟]{2,}"))
TRANSPOSE函数是一个转置函数,相当于选择性粘贴中的转置功能。
TRANSPOSE函数的语法:
TRANSPOSE(数据区域)
所以运用TRANSPOSE函数将REGEXP返回的一行多列的数组溢出结果转换为一列多行的结果,即一行转一列的转置效果。
然后我们提取销量数字。
继续输入正则函数REGEXP:
=REGEXP(A2,"\d+")
\d表示任意的单个数字;
\d+表示多个任意的连续数字。
REGEXP函数,使用正则表达式"\d+",可以将A2单元格内的销量数字部分全部提取出来。
使用TRANSPOSE函数:
=TRANSPOSE(REGEXP(A2,"\d+"))
再次运用TRANSPOSE函数将REGEXP返回的一行多列的数组溢出结果转换为一列多行的结果,即一行转一列的转置效果。
最后我们提取单位数据。
继续输入正则函数REGEXP:
=REGEXP(A2,"(?<="&C4#&":"&D4#&").")
〖往期知识点精彩超链接点击阅读〗