批量提取手机\固话 正则搭配VBA迎刃而解

批量提取单元格中的中文 呼叫正则


点击上方“Excel和VBA”,选择“置顶公众号”

致力于原创分享Excel的相关知识,源码,源文件打包提供

一起学习,一起进步~~


之前我们也是学习了一些关于单元格的提取的方法,在之前的单元格内容的提取中,我们主要用的方法是正则,正则和VBA的搭配,在提取单元格的操作中还是非常实用的

上一节我们说要提取一些比较实用但又稍微有一些复杂的内容,那么是什么呢?比方说联系电话,联系电话又分为手机和固话两种形式,今天我们将两种形式放在一起来讲解下

场景说明

我们今天重新构造一个场景,如下

我们先来分析下,怎么实现,方法肯定已经锁定正则了,现在需要考虑的就是正则要如何来写

首先手机号码,我们都知道一共有11位,那么也就是说我们只需要将上述单元格中,长度为11位的数字提取出来就可以了

然后固话,要想提取固话,我们需要知道固话的组成和结构,区号+号码,这里又细分为两种,去过区号是3位,那么后面的号码就是8位,如果区号是4位,后面的号码就是7~8位

有了这个思路之后,要实现起来就比较的简单了,来看下代码

代码区

Sub tel()Dim rng As Range, a As RangeSet rng = Application.InputBox("请选择单元格区域", "提取单元格的中文", , , , , , 8)For Each a In rng    MyStr = a.Value    ResultStr = ""    With CreateObject("VBSCRIPT.REGEXP")        .Pattern = "\d{11}"        .IgnoreCase = True        .Global = True        If .test(MyStr) Then            For Each Item In .Execute(MyStr)                ResultStr = ResultStr & Item            Next Item            a.Offset(0, 1) = ResultStr        End If    End WithNext aEnd SubSub tel2()Dim rng As Range, a As RangeSet rng = Application.InputBox("请选择单元格区域", "提取单元格的中文", , , , , , 8)For Each a In rng    MyStr = a.Value    ResultStr = ""    With CreateObject("VBSCRIPT.REGEXP")        .Pattern = "\d{3}-\d{8}|\d{4}-\{7,8}"        .IgnoreCase = True        .Global = True        If .test(MyStr) Then            For Each Item In .Execute(MyStr)                ResultStr = ResultStr & Item            Next Item            a.Offset(0, 1) = ResultStr        End If    End WithNext aEnd Sub

注意,我们这里是将两段代码合起来一直展示了,大家在实际使用中要注意区分,不要笼统的直接两段代码都拿过来当成一个功能使用了。

来看下代码的效果

代码解析

今天我们来比较简单的分享一些正则表达式的使用 开头我们也是分析了方法 手机号码总共有11位,那么我们需要将11位数字的号码提取出来,正则表达式呢,就分为两个部分

1. 11位2. 数字

11位呢,在正则中是这样表示的,{11},{ }内部的数字代表的就是 数字的位数,如果想要表达一个区间呢?{11.15}11位到15位就是这样表示的 数字呢,前面已经学习了,\d代表的就是数字

组合起来\d{11}这就是手机号码的正则表达式了

下面再来看固话,固话我们也了解了结构,区号+号码

区号有3~4这两种,并且还是数字,那么我们就可以写成\d{3}和\d{4}

号码是7位和8位两种,3位区号对应8位号码,4位区号对应7~8位的号码\d{8}和\d{7,8}

合起来呢

\d{3}-\d{8}|\d{4}-\{7,8}

细心的小伙伴们会发现中间多了一个“|”,是什么意思呢?

转换成为汉语就是或者,“|”就是或者的意思

整个代码合起来就是寻找单元格中,3个数字+8个数字或者4个数字+7~8位的数字组成的一个组合

今天文字讲解比较多,不知道小伙伴们理解了吗?

(0)

相关推荐

  • 查找单元格并快速显示对应的地址

    假设某个表格中,希望去查找某个人,找到后显示其位置. 如下表格,想查找是否有"赵甲子",如果有则显示其位置. 在Excel中,使用CTRL+F进行查找,查找到了光标将会停留在这个单 ...

  • Excel VBA 8.22 完善提取数字代码,正则是关键

    前景提要 昨天我们学习了如何通过正则的方式来提取单元格中的数字,这里的数字是纯数字,并没有其他的中文,或者英文,不过有小伙伴说这样的场景太简单,实际的工作中,提取场景会更加的复杂,提取的结果也是要求更 ...

  • Excel教程:统计加粗单元格个数

    写这篇教程,还是源于一位小伙伴的提问,想统计Excel表格中加粗单元格个数.解决这个小问题,雅雯想到的至少有3种方法. 1. 用查找功能,查找单元格格式为加粗的单元格 2. 使用GET.CELL宏表函 ...

  • (1条消息) VBA正则表达式深度解析

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_25846269/article/ ...

  • Excel VBA 8.23 批量提取单元格中的中文 呼叫正则

    批量提取单元格中的中文 呼叫正则 点击上方"Excel和VBA",选择"置顶公众号" 致力于原创分享Excel的相关知识,源码,源文件打包提供 一起学习,一起进 ...

  • Excel VBA 8.24 批量提取英文,区分大小写,你还是需要正则

    批量提取单元格中的中文 呼叫正则 点击上方"Excel和VBA",选择"置顶公众号" 致力于原创分享Excel的相关知识,源码,源文件打包提供 一起学习,一起进 ...

  • 菜鸟记189-3分钟批量提取并重命名好文档中的100张图片,99.99%的您都做不到!

    关键词:WORD2016:批处理文件:提取图片:自动目录:REN命令:重命名:操作难度*** 温馨提示:今天的文章约1000字,阅读大约需要8分钟,能为您节约2个小时的重复劳动时间 Long long ...

  • 【技巧】批量提取文档图片的技巧~

    大家晚上好! 现在手里有一份多图片的文档,需要将文档里面的图片都提取出来,不知道小伙伴都会用什么方法的呢?在这里琉璃分享两种方法. 一.改后缀名 将文档的后缀名由[.docx]改为[.rar],然后双 ...

  • 如何批量提取工作表名称

    如何将工作簿中的所有工作表名称批量提取出来呢? 这里有两种方法: 一.专业法 第一步:点击公式--定义名称,在开的界面中定义好名称,比如"名称",在引用位置中输入公式=MID(GE ...

  • 技巧丨批量提取单元格中右边的数字

    技巧丨批量提取单元格中右边的数字

  • excel里如何批量提取身份证号对应的年龄?

    excel职场人事必学技巧,如何根据身份证号计算年龄? 这个小技巧里,用到了YEAR函数和MID函数. YEAR函数把系列数转换为年,MID函数是提取一串字符串指定数量的字符. 思路:第一步利用YEA ...

  • Excel 邮箱 | 快速批量导入手机通讯录

    生活中会遇到将大量联系人导入手机通讯录的情况.这时,如果选择一个一个输入会非常麻烦.这里给大家介绍一个简便易行的方法,只要一个Excel和网易邮箱就可以做到. 第一步: 登录网易邮箱,选择通讯录,点击 ...