大家好,我是爱分享的永恒君!
今天分享一个日常经常会遇到的处理Excel字符的实例。
如下图:
这里有一张产品的表格,C列是产品的一些相关的信息,需要从里面分别提取指定的内容到E、F、G、H列中,如下图:
最终可以快速的实现如下的结果:
思路
以C2为例,我们来仔细观察一下
可以看到,所需要的信息分在不同的行,比较凌乱。
1、这个时候一般来说,会考虑将单元格的内容处理成一行,即将单元格内的换行符删除掉。
在VBA中,使用下面的replace函数可以实现这个效果。
Replace(rng, Chr(10), " ")
处理前后的效果:
2、接下来只要考虑提取所需的内容就可以了。一般常用的方法有分割法和正则法。
假设我们经过第一步,处理好的字符串为
string="Suitable: BENZ W204/ W207/W197/W172 适用于: 奔驰 OEM: 2049058202 Light: Yellow(黄色) 4 Pin"
分割法
这里需要用到的是split()函数,基本语法如下:
返回值的是一个数组。
例如:提取BENZ W204/ W207/W197/W172
,可以两次使用Split()函数来达到提取的目的,:
Split(Split(string, "适用")(0), "Suitable:")(1)
这个方法简单粗暴有效,适合字符串简单有规律的情况。
正则法
之前也专门介绍过VBA关于正则的实例:
Excel vba 实例(8)- 利用正则表达式进行定向提取
正则是个好东西,任何字符串的任何处理都可以用正则来搞定,实用但是难用,核心是要能找到匹配的正则表达式。
还是以这个字符串为例:
string="Suitable: BENZ W204/ W207/W197/W172 适用于: 奔驰 OEM: 2049058202 Light: Yellow(黄色) 4 Pin"
要提取BENZ W204/ W207/W197/W172
,通过观察,最直观的感觉就是这段编码位于Suitable:
和适用于
之间,那么可以使用这样的表达式来处理
(?=适用于:)(.*?)(?=OEM)
使用VBA的话,可以参考下面的代码:
Set reg = CreateObject("VBScript.RegExp")
With reg
.Global = True
.Pattern = "(?=适用于:)(.*?)(?=OEM)"
get_string = Replace(.Execute(i)(0), "适用于:", "")
End With
效果展示
说明
1、以上只是介绍实例及方法,无法通用。需要根据你的实际字符串来调整思路和方式。
2、做字符串提取的工作,需要根据原始字符仔细观察,多测试,没有一个通用、一成不变的方法,需要多测试才行。
3、正则方法好用,效率那是刚刚的。但是表达式太难写。一般可以直接在网上搜索是否有别人现成写好的,不然太难了。
最后,关于这个实例,感兴趣的可以可以在公号内回复「字符串」,或者直接 点击这里 即可进行试用哦~