Excel VBA 8.21从单元格文本中提取数字 how?
前几天我收到了一个小伙伴的反馈 , 他表示希望能够针对单元格内容中数字的提取稍微说一下 , 单元格中内容的提取也是很常见的操作 , 如果数据量小的话 , 我们可以用最传统的方法 , 手工+肉眼的方式来提取 , 但是如果碰到数据量大的话 , 就需要考虑用其他的方法了 , 这个其他 , 自然就是指VBA了 。 一起来看看
文章图片
简单的构造一下数据 , 常见的数字提取的场景 , 无外乎就是上面几种 , 数字在开头 , 或者结尾 , 或者中间 , 或者搭配中文 , 或者搭配英文 , 常规的就这样 。
那我们就以这个数据源为引子 , 开启关于单元格内容提取的篇章吧 , 比方说提取中文 , 提取英文 , 电话 。。。。
好了 , 撤的有点远了 。
回归正题 , 我们用VBA将单元格中的数字提取出来
Subsz
DimrngAsRange,aAsRange
Setrng=Application.InputBox("请选择单元格区域","提取单元格的数字",,,,,,8)
ForEachaInrng
MyStr=a.Value
ResultStr=""
WithCreateObject("VBSCRIPT.REGEXP")
.Pattern="d"
.IgnoreCase=True
.Global=True
If.test(MyStr)Then
ForEachItemIn.Execute(MyStr)
ResultStr=ResultStr&Item
NextItem
a.Offset(0,1)=ResultStr
EndIf
EndWith
Nexta
EndSub
说到提取数字 , 你可能还是一点思路都没有
因为之前我们的操作都可以用VBA的一些常用方法来实现 , 但是这个提取数字 。。。 似乎没有
不过不着急 , 其实在之前讲解单元格拆分的时候 , 我们已经用过这个方法了 , 有没有印象 , 他就是正则
先来看看代码的效果
文章图片
整理来说 , 初步效果已经达到 。
前面已经说了 , 今天我们用到的方法 , 其实就是正则
也许很多小伙伴会非常希望讲解下VBA中正则的用法
我已经安排上了 , 后面会详细的讲解的 , 因为正则涉及的东西比较多 , 三言两语也说不清
这里大家就先学会这个方法
想要在VBA中使用正则 , 第一件事就是告诉VBA我要使用正则了 , 如何告诉呢?
WithCreateObject("VBSCRIPT.REGEXP")
*****
endwith
既然正则都需要写表达式 , 那么我们现在就来看看表达式怎么写
【Excel VBA 8.21从单元格文本中提取数字 how?】.Pattern="d{"
.IgnoreCase=True
.Global=True
这三个就是正则表达式在VBA中的结构了
其中Pattern后面的就是正则表达式
IgnoreCase表示是否忽略大小写
Global则代表是否全局匹配
常规下 , 都是直接按照上面的模式写 , 只需要更改下pattern后面的正则表达式即可
这是套路
想要获得纯数字的结果 , 正则表达式就是"d"
他就是匹配数字的
利用正则查找 , 他肯定会返回一个结果 , 这个结果我们就直接判断是否为空 , 如何判断
If.test(MyStr)Then
ForEachItemIn.Execute(MyStr)
ResultStr=ResultStr&Item
NextItem
a.Offset(0,1)=ResultStr
EndIf
下面这些就是基本套路了 。 套路这个东西 , 简单说 , 就是拿来用就好 。
其中ResultStr就是最终返回的结果
文章图片
有了结果 , 直接填入单元格中 , 这个简单操作 , 对大家来说都是soeasy啦 。
- 怎样微信接龙不刷屏经验支持导出Excel
- SQL轻松玩转Excel的10大功能,最后再来几道面试题练练手
- 同时展示每月和累计数据的Excel组合图表
- 盘点EXCEL常用插件工具,第一个就直接让人直呼好家伙,太秀了!
- 办公小技巧:全部亮相 让Excel单元格完全显示文本
- Excel对比两列数据,并用升降箭头标示,让表格更清晰明了
- 电脑里的Excel文件受损丢失怎么找回?一起看万兴恢复的教程!
- 批量图片转Excel,软件神器一键识别,提高工作效率
- Excel中用复制、粘贴还能完成两列合并,来学学吧,工作中常用到
- Excel VBA之函数篇-3.6自动录入时间不精确?搭配时间生成器更完美
