客户备注栏目,手机号淹没在杂乱的文字信息中,没有统一的格式。怎么把手机号单独提取出来呢?
今天格子间为大家介绍:数据清洗07|如何从单元格文本中提取特定数字?
适用场景:
文本格式规范统一,仅含有一种类型的数字,如手机号或身份证号,提取会更精准。
操作步骤:
①按照数字提取需求,手动提取目标数字,作为参考范例;
②选中手动提取的目标数字+剩余空白行;
③按【Ctrl+E】,会自动识别提取规律,批量提取其余目标数字。
注意事项:
①当文本格式混乱,数字类型多,提取时大概率会出错;
②常用检查方法:提取后数字长度(len函数)、提取后首个数字(left函数)。
(1)数据准备:清洗不可见字符
使用函数法,建议先清洗单元格内空格、换行等不可见字符。
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2," ", ","),CHAR(10), ","),CHAR(13),",")(2)提取指定长度数字
①提取11位手机号,均需同时按住【Ctrl+Shift+Enter】
公式1:
=MID(B2,MATCH(TRUE,ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),11)),0),11)=MID(B2,MATCH(1,ISNUMBER(--MID(B2,ROW($1:$1000),11))*1,0),11)②提取18位身份证号,均需同时按住【Ctrl+Shift+Enter】
公式1:
=MID(B2,MATCH(TRUE,ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),18)),0),18)公式2:
=MID(B2,MATCH(1,ISNUMBER(--MID(B2,ROW($1:$1000),18))*1,0),18)公式3(增加末尾是X的规则校验):
=MID(B2,MATCH(1,(ISNUMBER(--MID(B2,ROW($1:$1000),18)))*(ISNUMBER(--LEFT(MID(B2,ROW($1:$1000),18),17))*(ISNUMBER(--RIGHT(MID(B2,ROW($1:$1000),18),1))+ (RIGHT(MID(B2,ROW($1:$1000),18),1)="X"))),0),18)注意:处在末尾的数字,不满18位也会被提取,后期可用【len函数】验证。
(3)提取第一个连续数字(非特定长度)
=LOOKUP(9E+307,--MID(B2,MIN(IF(ISNUMBER(--MID(B2,ROW($1:$1000),1)),ROW($1:$1000))), ROW($1:$1000)))会出现问题:
①首“0”会不显示;
②提取的数字一旦超过15位,会变成科学计数法,数字无法还原。
(4)提取所有数字
公式1:
=SUM(MID(0&B2,LARGE(ISNUMBER(--MID(B2,ROW($1:$1024),1))*ROW($1:$1024),ROW($1:$308))+1,1)*10^ROW($1:$308)/10)会出现问题(同上):
①首“0”会不显示;
②提取的数字一旦超过15位,会变成科学计数法,数字无法还原。
公式2(需要Excel 2019及以上):
=TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(B2,ROW($1:$100),1)),MID(B2,ROW($1:$100),1),""))公式3(需要Excel 2019及以上):
=CONCAT(IF(ISNUMBER(--MID(B2,ROW($1:$1024),1)),MID(B2,ROW($1:$1024),1),""))如果文本有一定的规律,比如“手机号:XXX,身份证:XXX”,优先推荐使用【数据分列】。
①复制原始数列,【数据分列】功能不会保留原始数据;
②选中复制后的数列;
③依次点击【数据-分列-下一步】;
④参照下图,在弹框中依次选择/输入;

需要注意:
①一定要复制初始数据,保留原数据,方便后期溯源;
②分列第3步,一定要修改每列数据格式为“文本”,否则超过15位的数字会以科学计数法显示;
③每次分列时,最好在该列的后面多插入空白列,因为分列后的数据会直接覆盖后面的数列。
👇关注格子,学习更多办公实用技巧,2026争取少加班、早下班!