在VB6/VBA中使用正则表达式
最近在Office的QQ群里问如何在一串字符串中提取数值并加总的问题。如果使用正则表达式可以非常迅速的解决这个问题。
那么今天我就探讨一下在VB6/VBA中使用正则表达式的方法及代码,另外为了快速测试正则表达式,我给大家推荐notepad++及使用方式。
1、按Alt+F11进入Excel的VBE环境,依次选择“工具/引用”菜单,选择“Microsoft VBScript Regular Express”;

2、插入一个模块,在模块中输入如下所示的代码;
Function SumValueInText(TargetRange As Range) As Double
Dim mRegExp As RegExp
Dim mMatches As MatchCollection '匹配字符串集合对象
Dim mMatch As Match '匹配字符串 Set mRegExp = New RegExp
With mRegExp
.Global = True 'True表示匹配所有, False表示仅匹配第一个符合项
.IgnoreCase = True 'True表示不区分大小写, False表示区分大小写
.Pattern = "([0-9])?[.]([0-9])+|([0-9])+" '匹配字符模式
Set mMatches = .Execute(TargetRange.Text) '执行正则查找,返回所有匹配结果的集合,若未找到,则为空
For Each mMatch In mMatches
SumValueInText = SumValueInText + CDbl(mMatch.Value)
Next
End With Set mRegExp = Nothing
Set mMatches = Nothing
End Function
3、在工作表的A列单元格中输入各种测试字符串,在B列单元格中输入自定义函数进行测试,结果如下图所示;

在VB6/VBA中使用正则表达式时,我们也可以省去第一步,即采用后期绑定的方式来使用正则表达式,但是代码要做相应的调整,如下所示为调整后的代码。
Function SumValueInText(TargetRange As Range) As Double
Dim mRegExp As Object '正则表达式对象
Dim mMatches As Object '匹配字符串集合对象
Dim mMatch As Object '匹配字符串 Set mRegExp = CreateObject("Vbscript.Regexp")
With mRegExp
.Global = True 'True表示匹配所有, False表示仅匹配第一个符合项
.IgnoreCase = True 'True表示不区分大小写, False表示区分大小写
.Pattern = "([0-9])?[.]([0-9])+|([0-9])+" '匹配字符模式
Set mMatches = .Execute(TargetRange.Text) '执行正则查找,返回所有匹配结果的集合,若未找到,则为空
For Each mMatch In mMatches
SumValueInText = SumValueInText + CDbl(mMatch.Value)
Next
End With Set mRegExp = Nothing
Set mMatches = Nothing
End Function
在VB6/VBA中使用正则表达式的更多相关文章
- VB6/VBA中跟踪鼠标移出窗体控件事件(类模块成员函数指针CHooker类应用)
一.关于起因 前几天发了一篇博文,是关于获取VB类模块成员函数指针的内容(http://www.cnblogs.com/alexywt/p/5880993.html):今天我就发一下我的应用实例. V ...
- 使用vba做一个正则表达式提取文本工具
测试中经常会遇到对数据的处理,比如我要删除某些特定数据,数据源是从网页请求中抓取,这时候可能复制下来一大堆内容,其中我们只需要特定的某些部分,笔者通常做法是拷贝到notepad++中处理,结合RegT ...
- 《SeleniumBasic 3.141.0.0 - 在VBA中操作浏览器》系列文章之一:SeleniumBasic的下载
Selenium是一种非常流行的浏览器和网页自动化技术,开发人员可以使用C#.Java.Python等语言来操作Chrome.Firefox等浏览器. VBA语言可以直接操作访问Microsoft I ...
- VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)
VB6.0中,日期.时间控件不允许为空时,采用文本框与日期.时间控件相互替换赋值,或许是一个不错的选择. 实现效果如下图: 文本框txtStopTime1 时间框DTStopTime1(DTPicke ...
- PHP中有关正则表达式的函数集锦
之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载.当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有 ...
- JavaScript中的正则表达式(终结篇)
JavaScript中的正则表达式(终结篇) 在之前的几篇文章中,我们了解了正则表达式的基本语法,但那些语法不是针对于某一个特定语言的.这篇博文我们将通过下面几个部分来了解正则表达式在JavaScri ...
- Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Thursday, January 29, 2015 补上第四周笔记,以及本次课程总结. 第四周 ...
- 9.JAVA中的正则表达式
一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ? #{0,1}-?有一个-或者没有 \\ #表示一个" ...
- VB类模块中属性的参数——VBA中Range对象的Value属性和Value2属性的一点区别
在VB中,属性是可以有参数的,而VBA中属性使用参数非常常见.比如最常用的:Worksheet.Range("A1:A10") VB的语法,使用参数的不一定是方法,也有可能是属性 ...
随机推荐
- shell基础学习系列(一)
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行. 输入一些代码: #!/bin/bash echo "Hello World !" &qu ...
- Matlab命令行编译运行HelloWorld
Matlab安装完成后用记事本写一个文件HelloWorld.m内容如下: function HelloWorld() disp('Hello,World!'); end 保存后在命令行中切到Hell ...
- Cordova的搭建
Cordova的搭建 cordova也叫phonegap,可以用来打包网页生成Android或iOS或其他平台的APP,它提供了一些native api,可以让网页调用本地函数,极大地增强了网页的功能 ...
- 【2017年新篇章】 .NET 面试题汇总(二)
本次给大家介绍的是我收集以及自己个人保存一些.NET面试题第二篇 第一篇文章请到这里:[2017年新篇章] .NET 面试题汇总(一) 简介 此次包含的不止是.NET知识,也包含少许前端知识以及.ne ...
- htmlunit 导致高cup占用的坑
原文:http://blog.csdn.net/qq_28384353/article/details/52974432#reply 将爬虫部署到服务器上运行后,在查看服务器的状态监控时发现,天猫爬虫 ...
- HttpWebRequest 模拟网站登录获取数据
此文档仅仅是一个BaseCode,已做后续查阅 项目使用IBM Platform Symphony分布式平台,所有业务处理都在这个分布式平台上计算,需求是获取这些计算机机群的运行状态,和每一个服务的的 ...
- golang中的reflect包用法
最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...
- laravel初次学习总结及一些细节
最近学习了laravel,先简单谈谈学习的感受吧 刚开始一周多一点的时间先把laravel的开发文档看了一遍,,感觉刚开始接触时的感觉laravel的目录与thinkphp又不一样,它们的渲染模板的方 ...
- Struts2学习笔记②
之前在跟着老师们做项目的时候经常会烦恼Struts.xml怎么配置,老师也没讲太清楚,都是说很简单,但是不懂的人就是太难了!哈哈,万事还是要靠自己的! struts.xml今天又看了几个小时的书,也跟 ...
- JS实现购物车特效
学习通过JavaScript实现类似于淘宝的购物车效果,包括商品的单选.全选.删除.修改数量.价格计算.数目计算.预览等功能. 1. 实现兼容低版本IE的getElementsByClassName( ...