小面包 面包多
简介
评论
作品封面
永久回看

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

¥5 已有99+人购买Ta的作品
投诉
头像
永恒君的百宝箱 分享Excel VBA、Python等各种提升工作效率的工具和方法。
作品简介

VBA实例文件需要付费使用,有任何疑问可以咨询我。

点击下方红字进行查看。(建议使用PC端浏览查看和下载,常见问题查看这里


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

今天分享一个日常经常会遇到的处理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、正则方法好用,效率那是刚刚的。但是表达式太难写。一般可以直接在网上搜索是否有别人现成写好的,不然太难了。


点击下方红字进行查看。(建议使用PC端浏览查看和下载,常见问题查看这里



付费5元可获得

  • 文字 25个
  • 附件 1个
    34.01KB

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

购买该全家桶含此作品及其他作品共11件

Excel VBA实例汇总(已有47个实例) 全家桶

Excel VBA实例汇总(已有47个实例)

¥158 仅需 ¥100

评论 推荐Ta
推荐

推荐这个作品

帮助这个作品传播得更远?
你愿意在你的作品下方「猜你喜欢」区域展示这个作品吗?

1. 作者会看到你的帮忙,并真心感谢你

好的 我再想想

暂时还没有评论


头像
永恒君的百宝箱 分享Excel VBA、Python等各种提升工作效率的工具和方法。
关注
2 喜欢 0 关注 88 粉丝 51 作品

  • 主页
  • 私信
登录或购买