跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Excel怎么快速提取手机号 Excel从杂乱文字提取数字方法【技巧】

Excel中提取手机号有四种方法:一、SUBSTITUTE与MID结合辅助列提取11位数字;二、Power Query按非数字拆分并筛选符合号段的11位数;三、VBA正则匹配1[3-9]\d{9};四、TEXTJOIN+FILTERXML解析分割后筛选。

如果您在Excel中处理包含大量杂乱文本的数据,需要从中快速定位并提取手机号码,则可能是由于手机号嵌套在句子、地址或混合字符中,无法直接识别。以下是实现该目标的多种方法:

一、使用SUBSTITUTE与MID结合正则逻辑提取

该方法适用于手机号固定为11位且前后无其他11位数字干扰的场景,通过逐字符判断数字连续性,再截取最长数字串。需配合辅助列与公式组合实现。

1、在B1单元格输入公式:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"0",""),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9",""),得到纯非数字字符串;

2、在C1输入:

=LEN(A1)-LEN(B1),确认原始文本中数字总个数;

3、在D1输入:

=IF(C1>=11,MID(A1,FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"),11),""),此为简化示意,实际需数组公式配合MATCH定位起始位置;

4、按Ctrl+Shift+Enter生成数组公式,再向下填充至整列。

二、利用Power Query清洗并筛选11位数字

Power Query具备强大的文本分隔与条件筛选能力,可自动识别并保留长度为11且符合手机号号段规则(如13x/14x/15x/17x/18x/19x)的数字串,避免误提身份证后11位等干扰项。

1、选中数据列 → 数据选项卡 →“从表格/区域”导入,勾选“表包含标题”;

2、在Power Query编辑器中,选择该列 → 转换选项卡 →“拆分列” → “按非数字字符”

;

3、选中所有新生成的数字列 → 右键 →“更改类型” → “整数”

,错误值将标为null;

4、添加自定义列,输入公式:

=if Text.Length(Text.From([Column1]))=11 and Text.Start(Text.From([Column1]),1)="1" then [Column1] else null;

5、筛选该列非空值 → 关闭并上载至工作表。

Python对Excel操作详解 中文WORD版本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd、xlwt和xlutils模块。另外还演示了如何通过Tcl tcom包对excel操作。感兴趣的朋友可以过来看看下载

三、使用VBA函数自定义提取手机号

该方法通过编写正则表达式匹配函数,精准识别以1开头、第二位为3-9、共11位的连续数字,支持一键调用,适用于重复批量处理。

1、按Alt+F11打开VBA编辑器 → 插入 →“模块”

;

2、粘贴以下代码:

Function GetMobile(str As String) As StringDim reg As ObjectSet reg = CreateObject("VBScript.RegExp")reg.Pattern = "1[3-9]\d{9}"reg.Global = TrueIf reg.Test(str) Then GetMobile = reg.Execute(str)(0).Value Else GetMobile = ""End Function

3、返回Excel,在空白单元格输入:

=GetMobile(A1);

4、向下拖拽填充,所有匹配到的首个手机号即显示在对应单元格。

四、借助TEXTJOIN与FILTERXML提取(仅限Office 365或Excel 2021)

该方法利用FILTERXML解析XML结构,将文本按非数字分割后转为节点列表,再用TEXTJOIN合并符合条件的11位数字,无需宏且公式可直接下拉复用。

1、在B1输入完整公式:

=TEXTJOIN("",TRUE,FILTERXML(""&SUBSTITUTE(SUBSTITUTE(A1,"","》")&"","//b[not(contains(.,'.')) and string-length(.)=11 and starts-with(.,'1') and number(.)=number(.)]"));

2、按Enter确认,公式将自动过滤出满足11位、以1开头、纯数字的字符串;

3、若存在多个手机号,此公式默认只返回第一个;如需全部,需嵌套INDEX+SEQUENCE调整XPath路径索引。

相关文章