用EXCEL给卡号添加空格,学会的财务同学已经早下班了
做财务的同学,少不了要输入各种卡号。但是动辄16位以上数字,想要一次性输入正确还有点难度,特别是遇到里面有4个以上相同数字时,还需要多次进行确认。一些比较暖心的同事在给别人发卡号、手机号时,会每4位加上一个空格,可读性立马就上来了。对比一下:加空格前:6228482200000045101
加空格后:6228 4822 0000 0045 101
但是遇到不那么贴心的人发来的卡号,我们可以用EXCEL中的公式,实现以空格进行分割。今天就带大家用7种不同的方法来实现。
马上有同学举手了
,这个我会,用EXCEL中的TEXT函数,可以自定义数字显示的格式。比如TEXT(15523456789,"0000 0000 000")=1552 3456 789但是当用TEXT函数对6228482200000045101 进行操作后,却发现公式输出变成了6228 4822 0000 0040 000,卡号最后4位的5101全部显示成了0。

因为在EXCEL中最多显示15位的数字,超过15位的数字会默认用科学计数的方式来保存,就损失了一部分精度。另外,卡号长度如果小于15位,使用TEXT函数操作后,还会在前面显示多余的0。
根据思路生成的公式
好的,现在我们开始,先梳理一下我们的思路,通过以下三步来完成:- 如果这个位上的序号恰好是4的倍数,那么我们就补上一个空格;
=TRIM(LET(x,ROW($1:$20),CONCAT(MID(A2,x,1)&IF(MOD(x,4),""," "))))以下是百度文心一言对这个公式的解释(懒得打字,AI生成的容有部分调整):ROW($1:$20)
- 生成一个垂直数组
{1;2;3;...;20},表示从A2中提取字符的位置(假设卡号最长20位)。
LET(x, ROW(...), ...)
MID(A2, x, 1)
- 当
x=1→"6" - 当
x=2→"2" - ...
- 当
x=20→ 若A2不足20位,返回空字符串""。
IF(MOD(x, 4), "", " ")
- 余数为0时(即
x 是4的倍数),返回 " "(1个空格); - 否则返回空字符串
""。
CONCAT(MID(...) & IF(...))
x=4 时:"6" & " " → "6 "x=5 时:"2" & " " → "2"
Trim函数用于清除字符串开头或结尾的多余空格,如果字符串长度小于16可能后面会有多个空格。实际使用中根据需要,可加可不加。
简化后的公式
=CONCAT(MID(A3,{1,5,9,13,17},4)&" ")=TEXTJOIN(" ", , MID(A3, {1,5,9,13,17}, 4))这两个公式的核心逻辑都是用MID函数,用常量数组从指定的位置,依次取4个字符串。然后通过字符串连接函数CONCAT或TEXTJOIN函数生成。
循环拼接的公式
好了,现在我们换个思路。如果说我们不用字符串拼接函数,我们能否完成这个操作呢?回到我们最初的思路上,从原字符串中取出4个字符,加上1个空格,再取出4个字符,再加上1空格,如此操作,直到完成。有编程思想的同学心想,这不就是循环结构么?在EXCEL2021版本之前,我们可以通过内存数组,如ROW(1:2)的方式进行循环,但是如果不用字符串接接函数,我们如何在公式中实现呢?在EXCEL2021版本后,新增加的几个函数,是可以支持循环的,如SCAN 、REDUCE,LAMADA函数与LET配合进行嵌套调用,也可以实现循环。我们用REDUCE函数的,搭配LAMADA与MID函数,写这样一个公式:=REDUCE("",{0,1,2,3,4},LAMBDA(x,y,x&MID(A6,y*4+1,4)&" "))以下是百度文心一言对这个公式的解释(懒得打字,AI生成的容有部分调整):1. 核心函数:REDUCE
- 作用:对数组
{0,1,2,3,4}进行迭代计算,逐步累积结果。 - 参数:
- 初始值:
""(空文本,作为累积的起点)。 - 数组:
{0,1,2,3,4}(表示分组次数,共5组)。 - LAMBDA函数:定义每次迭代的计算规则。
2. LAMBDA 函数:LAMBDA(x, y, x & MID(A6, y*4+1, 4) & " ")
x:当前累积的结果(初始为"",后续为上一次迭代后的文本)。y:当前迭代的数组值(即0, 1, 2, 3, 4)。
y*4+1:计算每组的起始位置。
- 当
y=0→ 起始位置1(第1组:1~4位)。 - 当
y=1→ 起始位置5(第2组:5~8位)。 - 依此类推。
MID(A6, y*4+1, 4):从A6中提取4位字符。
- 例如:
MID(A6, 1, 4)→"6228"(第1组)。
x & ... & " ":将当前分组结果追加到累积文本中,并添加一个空格。
3. 迭代过程
迭代次数 (y) | 起始位置 (y*4+1) | 提取的4位字符 | 累积结果 (x) |
0 | 1 | "6228"
| "" + "6228" + " "
→"6228 " |
1 | 5 | "4822"
| "6228 " + "4822" + " "
→"6228 4822 " |
2 | 9 | "0000"
| "6228 4822 " + "0000" + " "
→"6228 4822 0000 " |
3 | 13 | "0045"
| "6228 4822 0000 " + "0045" + " "
→"6228 4822 0000 0045 " |
4 | 17 | "101"
| "6228 4822 0000 0045 " + "101" + " "
→"6228 4822 0000 0045 101 " |
4. 最终结果
- 公式返回:
"6228 4822 0000 0045 101 "(末尾有一个多余空格)。 - 如果需要去除末尾空格,可嵌套
TRIM:
循环添加的公式
在EXCEL中对字符串进行替换时,我们经常会用到SUBSTITUTE函数。其实EXCEL中还有一个REPLACE函数也能进行替换。如果将一个电话号码13852345234中间的4位 用*号来替换,实现138****5234的效果,可以用下面两个公式实现:=SUBSTITUTE(13852345234,5234,"****",1) 或 =REPLACE(13852345234,4,4,"****")注意观察这个SUBSTITUTE函数,第4个参数表示要替换的实例位置,平常我们使用时很少用到第4个参数,此处要设置为1。关于SUBSTITUTE与REPLACE函数的区别,后面会再专开一篇来廛。REPLACE共有4个参数,第一个参数表示要操作的字符串,第二个参数表示替换开始的位置,第三个参数表示要替换的长度,第四个参数表示替换后的内容。非常棒的是,每三个参数可以为0。此时进行替换,就相当于在指定位置插入一段内容。
我们依照这个思路,再结合REDUCE函数进行循环操作,在指定位置加上空格,就可以实现了。=REDUCE(A3,{5,10,15,20},LAMBDA(x,y,REPLACE(x,y,," ")))
正则表达式替换
EXCEL新增加的函数中有正则表达式函数,熟悉正则表达式的同学来说,这个问题完全是小菜一碟。=REGEXREPLACE(A8,"(\d{4})","\1 ")以下是百度文心一言对这个公式的解释(懒得打字,AI生成的容有部分调整):"(\d{4})":正则表达式,匹配连续4位数字,并用括号()捕获为一个分组(记为\1)。"\1 ":替换内容,表示保留匹配到的4位数字(\1),并在后面加一个空格。
关于正则表达式的操作,感兴趣的朋友可以自行搜索,学会之后,你的工作会轻松很多。
WPS中的特有的一个函数
前面说到SUBSTITUTE函数,WPS在25年维护时新增了一个独有的SUBSTITUTES函数。英语中S表示复数,这里也可以理解为多次替换。利用这个函数,我们将原字符串中的每4位替换成它本身加一个空格,不就可以实现我们想要的结果么?=LET(x,{1,5,9,13,17},y,MID(A1,x,4),SUBSTITUTES(A1,y,y&" "))