跳到主要内容

手机号与银行卡的规范显示

同一列手机号,有人写 13800138000,有人写 138-0013-8000,还有人带 +86 前缀。做报表时看着乱,统计也容易错。这篇讲怎样在不改原始数据的前提下,把展示和统计都做对。

一、先判断底层是文本还是数字​

点单元格看编辑栏:编辑栏显示原样数字且左对齐,是文本;右对齐,多半是数值。

两种类型要两套写法,先统一再处理最省事:

=VALUE(A2) ' 文本转数值
=TEXT(A2,"0") ' 数值转文本

二、分段显示:优先用自定义格式​

数值型手机号,分段显示用单元格自定义格式最干净,因为它只是"看起来"变了,值还是原值:

Ctrl+1 → 自定义 → 000-0000-0000

银行卡 19 位按 4 位一组:

0000 0000 0000 0000 000

用函数也能做,但 TEXT 返回的是文本,结果不能再直接参与求和:

=TEXT(A2,"000-0000-0000")

要保留数值参与计算,就用自定义格式;要输出到别处,才用 TEXT。

三、脱敏打码​

对外提供名单时保留前 3 后 4:

=LEFT(A2,3)&"****"&RIGHT(A2,4)

想让结果保持 11 位长度,用 REPLACE:

=REPLACE(A2,4,4,"****")

银行卡只露后四位:

="**** **** **** "&RIGHT(A2,4)

打码生成新列。直接改原列,后面想核对都无从下手。

四、去掉 +86 和杂字符​

通讯录、系统导出常带前缀和分隔符,先清洗再判断长度:

=TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"+86",""),"-","")," ",""))

清洗完检查是否合规:

=IF(AND(LEN(B2)=11,LEFT(B2,1)="1",ISNUMBER(--B2)),"正常","异常")

--B2 确认全是数字,出现字母会报错,被 AND 判为假。

五、按号段粗分归属​

不用查号段库,先看前三位:

=IFERROR(LOOKUP(--LEFT(A2,3),{130;131;132;133;145;150;151;152;153;155;156;157;158;159;166;170;171;173;175;176;177;178;180;181;182;183;184;185;186;187;188;189;198;199},{"联通";"联通";"联通";"电信";"联通";"移动";"移动";"移动";"移动";"联通";"联通";"移动";"移动";"移动";"联通";"虚拟";"虚拟";"电信";"联通";"移动";"联通";"电信";"移动";"移动";"移动";"电信";"联通";"移动";"移动";"联通";"移动";"移动";"移动";"联通";"移动"}),"未知号段")

号段表会变,这套写法适合粗分。真要精确归属,得接号段数据源。

六、导入时别被改格式​

导入 CSV 后号码变科学计数法,是导入时没指定列类型。两个做法:

  1. 用"数据 → 从文本/CSV"导入,向导里把该列显式设为文本;
  2. 已经导坏的,回源数据重导——数值转科学计数法后精度已丢,公式救不回来。

录入时加数据验证限制长度:

允许:文本长度 等于:11

长度不对会直接弹提示,比事后查省力。

七、常见坑​

现象原因处理
号码末位变 0数值精度不足改文本后重录
TEXT 结果无法求和返回文本用自定义格式,或外层 VALUE
打码后发现原表也变了直接改了原列用公式生成新列
带 +86 判长度为 13未清洗前缀先 SUBSTITUTE 再判定

八、速查​

需求写法
分段显示(不改变值)自定义格式 000-0000-0000
手机号打码=REPLACE(A2,4,4,"****")
保留首尾=LEFT(A2,3)&"****"&RIGHT(A2,4)
去前缀=SUBSTITUTE(A2,"+86","")
合规判断=IF(AND(LEN(B2)=11,LEFT(B2,1)="1"),"正常","异常")

判断类型这一步别省。同一列里文本和数值混着放,后面任何一步聚合都会出错。