欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Office

两种提取混合字符中最后一个数字后的中文字符串的方法

程序员文章站 2022-03-04 19:22:16
些字段很有规律房间号均以1开头,都是4位数的房间号,物品名称都是在房间号之后,也就是说在最后一个数字之后,找最后一个数字的位置就可以了,有需要的朋友可以看看。 还...

些字段很有规律房间号均以1开头,都是4位数的房间号,物品名称都是在房间号之后,也就是说在最后一个数字之后,找最后一个数字的位置就可以了,有需要的朋友可以看看。

还是先上图吧,容易描述一些,见下图

两种提取混合字符中最后一个数字后的中文字符串的方法

收到一个问题,要提取房间号后的物品名称。

解决办法一:操作技巧

仔细观察后可以发现这些字段很有规律房间号均以1开头,都是4位数的房间号,所以如果是操作技巧的话,使用查找替换是最快捷的方式了。

两种提取混合字符中最后一个数字后的中文字符串的方法

步骤是:1、复制数据区域到B2:B19

2、ctrl+h,超找内容为*1???,替换为空(什么都不填写)

3、替换全部

OK,操作技巧处理这个问题就是这么快!

解决办法二:公式法

但是提问者想要公式解决这个问题,于是我把此问题作为群作业发布出去,一天时间收到了很多种不同思路的答案,现在整理一下,主要有以下思路:

1、找出最后一个数字的位置:仔细观察这个问题,物品名称都是在房间号之后,也就是说在最后一个数字之后,找最后一个数字的位置就可以了,这时match函数和lookup函数的查找要上场了:

a、=MID(A2,MATCH(1,-MID(A2,ROW($1:99),1))+1,9)

公式解释:MID(A2,ROW($1:99),1)将A2拆分成单个的字符,前面加符号,可以将mid函数返回的文本型数字,转成数值;将mid函数返回的汉字变成错误值。match函数超找1是因为-MID(A2,ROW($1:99),1)构成的数组最大值为0,所以查找值为1时,可以找到最后一个数字的位置,然后使用mid函数提取,因为目测这些物品名称最长也不超过9字符,所以mid的第三参数使用了9,缩短公式长度。

b、=MID(A2,LOOKUP(1,-MID(A2,ROW($1:98),1),ROW($2:99)),9)

公式解释:思路同上,只是使用了lookup函数,查找最后一个数字的位置,对应的数值ROW($2:99),相当于ROW($1:98)+1,缩减字符

c、=MID(A2,MATCH(,0/(MID(SUBSTITUTE(A2,"、",1),ROW($1:99),1)+1))+1,9)

公式解释:这里思路也和上面一样使用的是match函数经典用法,match(0,0/)由于本题分母有可能为0,所以这里公式MID(SUBSTITUTE(A2,"、",1),ROW($1:99),1)+1,避免了分母为0

2、找出第一个汉字的位置:物品名称的第一个都是汉字,汉字是双字节字符,这个题里还有顿号(、)是双字节的,所以公式是:

=MID(A2,MATCH(2,LENB(MID(SUBSTITUTE(A2,"、",1),ROW($1:99),1)),),9)

公式解释:汉字是双字节字符,顿号(、)是双字节字符,所以这里先把顿号替换成1,变成单字节(不能为了节省字符变成0省略!因为变成0省略时,这里会把省略的0当成空,结果出错),然后拆分成单个字符,lenb函数返回1或者2,match函数精确查找2,第一个出现的位置。

感觉以上四种答案是最通用,范围最广的,都很经典,可以自己慢慢消化理解

3、除了以上的公式,还可以看这个题的规律取巧写公式,因为房间号都是4位,中间是顿号隔开,所以还有下面的公式可以得出结果:

a、=MID(A2,COUNT(FIND("、",A2,ROW($1:99)))+5,9)

公式解释:find函数查找顿号的位置,返回值是数值或者错误值,第三参数是起止位置,count计算出find函数得出是数值的个数,这里可以求出最后一个顿号的位置,顿号过后是4个数字的房间号,然后是物品名称的第一个字,所以物品的第一个字是在顿号后面的第5个字符。

b、=MID(TRIM(RIGHT(SUBSTITUTE(A2,"、",REPT(" ",99)),99)),5,9)

公式解释:把顿号换成99个空格,然后从右提取99个字符,trim过滤掉多余的空格,从第5个字符开始提取。