Excel-VBA正则表达式提取文本案例

  背景是这样的,我手上有一份统计表,需要将IP地址里的省市提取出来,以便于处理。因此我首先想到了Python里的正则表达式,打算写一个自定义函数去批量提取。然而之前没学VBA里的正则表达式语法,因此就去网上搜了一下,结果发现根本不能运行。几经辗转,总算搞定,因此总结一下,供后来者参考。

  编程目的:实现IP地址中省市信息的提取。   

主要涉及的知识点:VBA函数、正则表达式

代码如下:

Function 提取省市(rng As Range, name)

    Application.Volatile
    Set regx = CreateObject("vbscript.regexp")

    With regx
        .Global = True
        .Pattern = "[\u4e00-\u9fa5]+"
        Set mat = .Execute(rng)
    End With

    Select Case name

        Case "省"
            提取省市 = mat.Item(0).Value

        Case "市"
            提取省市 = mat.Item(1).Value

        Case Else
            MsgBox ("输入有误")

    End Select

End Function

代码解释:

  1、rng As Range, name:传递两个参数,第一个参数为单元格参数。

  2、Application.Volatile  Set regx = CreateObject("vbscript.regexp"):创建正则表达式对象,固定语法。

  3、With regx

     .Global = True

     .Pattern = "[\u4e00-\u9fa5]+"

    Set mat = .Execute(rng)

    End With

  Global:表示是否进行全局检索,True表示将所有匹配的结果返回。False则是只返回第一个匹配结果。

  Pattern = "[\u4e00-\u9fa5]+"就是正则表达式了,其中[\u4e00-\u9fa5]+表示匹配中文字符串。

  4、Set mat = .Execute(rng):即执行正则表达式。返回一个matchcollection类型的集合,即匹配到的所有结果。

  5、接下来是一个多条件判断语句,相当于If ...Elif... Else...End If 。

  6、提取省市 = mat.Item(0).Value:前面我们提到mat是一个matchcollection类型的集合,mat.Item(0)表示读取第一个匹配结果,Value表示读取它的值。最后将这个值赋给函数。也可以不用后面的value。

原文地址:https://www.cnblogs.com/yimengtianya1/p/9200917.html

时间: 2024-10-12 15:36:38

Excel-VBA正则表达式提取文本案例的相关文章

C#正则表达式提取文本中以逗号间隔的数据

使用正则表达式提取文本数据到内存是很方便的技术,下面通过一个例子介绍一下如何使用正则表达式提取文本 文本中内容格式 1,2,3,4,5 2,2,2,2,2 3,3,3,3,3 C#代码如下 public List<List<string>> GetDataCSV(string path) {         string pattern = @"\d+"; List<List<string>> data = new List<Lis

使用vba做一个正则表达式提取文本工具

测试中经常会遇到对数据的处理,比如我要删除某些特定数据,数据源是从网页请求中抓取,这时候可能复制下来一大堆内容,其中我们只需要特定的某些部分,笔者通常做法是拷贝到notepad++中处理,结合RegTester工具,但是RegTest需要导出匹配数据,不能直接拷贝,稍微麻烦了一点点......于是想用vba写一个正则表达式提取工具好了,又不花时间.(晕,刚想起来其实会有在线工具的,比如:http://tool.oschina.net/regex/),虽然找到了在线工具,还是说一下自己做的这个吧~

PHP正则表达式提取html超链接中的href地址

用php的正则表达式相关函数,实现提取html超链接<a href="地址"></a>中的地址 <?php $preg='/<a .*?href="(.*?)".*?>/is'; $str ='<a href="链接1">URLNAME</a>文本段1<a href="链接2" target="_blank">URLNAME<

Excel VBA(宏):添加宏

写在前面: 1.编写宏,打开VBA,双击ThisWorkbook对当前工作薄进行编写宏:双击Sheet1,对整个sheet编写宏: 或者创建模块,在模块里,编写.调试代码. 打开VBA的方法见第一讲,结合常用窗口进行编写.调试. 2.部分对象有提示,如Dim a As,敲击空格后有提示. 3.所有宏要运行,必须启动宏.(2007版启动宏,点击表格左上角 "excel选项" "信任中心" "信任中心设置" "启用宏") 4.&q

Office EXCEL VBA数组如何使用

Excel VBA数组入门教程 1. 前言:不要把VBA数组想的太神秘,它其实就是一组数字而已. 2. 数组的维数: Sub 数组示例()  Dim x As Long, y As Long  Dim arr(1 To 10, 1 To 3)  '创建一个可以容下10行3列的数组空间  For x = 1 To 4    For y = 1 To 3       arr(x, y) = Cells(x, y)  '通过循环把单元格区域a1:c4的数据装进数组中    Next y  Next x

Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut

Excel VBA 从一个工作簿查找另一个一个工作簿中的一些内容复制到另外一个工作簿

帮朋友来写个Excel VBA 以前写过ASP,所以对vb略微熟悉,但VBA 没有仔细研究过. 以前只研究过 vba 写一个 计算个人所得税的程序. 这次写的功能也算是简单,但也耗费了两天的功夫. 需求: 1 从[操作]表中,查找最后一行的数据,每一列 都为关键字 2 遍历这些关键字,从[总表]中查询这个关键字,把这一行后面的内容复制到 [预算]表中去 3 把[操作]中制定内容复制到[信息统计]中 Function Get操作NullLine() ' '从 操作表 获取最后一个有数据下面的空行

用ABBYY提取文本和表格的方法

在ABBYY FineReader 12 OCR文字识别软件中,有一个插件ABBYY Screenshot Reader,通常情况下与ABBYY FineReader 12一起安装到计算机中,它是一款易于使用的智能型应用程序,可以从屏幕上的任何区域抓取图像和文本,且能够将这些图像和文本转换为可编辑的格式,无需再重新输入,使得重新利用数字文档.电子邮件或报告内容变得简单,支持超过180种语言,识别精确度也很出色. 只需点击几下,便可从打开的文档.文件菜单.网页.演示文稿.Flash内容和PDF文件

正则表达式与文本处理三剑客之一:grep和egrep

对于刚接触的人而言,正则表达式的学习与使用一个痛苦而迷茫的东东,但是只要有热心,也会发现很有趣的.那么请让我们打起精神,拿出自己的兴趣与激情一起走进Linux的奇妙世界吧. 什么是正则表达式? 正则表达式是你定义的,Linux工具用来过滤文本的模式模板,换句话说就是使用一定的工具(比如今天要写的grep和egrep)用来文本匹配和过滤的一个手段,是通过正则表达式引擎来实现的,而正则表达式引擎是解释正则表达式模式并使用这些模式进行文本匹配的底层软件,在Linux中有两种流行的正则表达式引擎(也就有