微信公众号:yhjbox(永恒君的百宝箱),获取最新文章、资源。

Excel VBA实例(47) – 批量提取单元格理需要的字符串内容

Excel VBA 实例 永恒君 1811℃ 0评论

大家好,我是爱分享的永恒君!

今天分享一个日常经常会遇到的处理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)- 利用正则表达式进行定向提取

Excel VBA实例(37) – 快速提取手机号及归属地

这样做,快速提取省份信息!

正则是个好东西,任何字符串的任何处理都可以用正则来搞定,实用但是难用,核心是要能找到匹配的正则表达式。

还是以这个字符串为例:

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、正则方法好用,效率那是刚刚的。但是表达式太难写。一般可以直接在网上搜索是否有别人现成写好的,不然太难了。

最后,关于这个实例,感兴趣的可以可以在公号内回复「字符串」,或者直接 点击这里 即可进行试用哦~

转载请注明:永恒君的百宝箱 » Excel VBA实例(47) – 批量提取单元格理需要的字符串内容

喜欢 (20)
发表我的评论
取消评论
表情