Excel 中的数据并不全是数字。身份证号、手机号、订单编号、产品型号、员工姓名加工号——这些文本类数据在日常表格中随处可见。麻烦的是,文本数据的格式往往不符合直接使用的要求:身份证号里藏着出生日期却没法直接提取,手机号需要隐藏中间四位才能对外展示,日期和编号需要拼接成一段完整的文件名,数字金额需要加上千分位逗号才能用于正式报表。手动处理这些文本,一两条还能应付,几百条就只能加班了。Excel 提供了一组专门处理文本的函数,能够完成格式转换、长度计算、字符提取和文本拼接四大类操作。
TEXT 函数的作用是把数值或日期按照指定的格式转换为文本。它不改变单元格中的原始数据,而是生成一个新的文本字符串,按照你给定的格式代码来显示。
函数语法:
=TEXT(值, 格式代码)
第一个参数是要转换的值(可以是数字、日期或单元格引用),第二个参数是一段格式代码,用英文双引号括起来,告诉 Excel 输出的文本长什么样。
A 列存放的是员工入职日期,格式是 Excel 默认的"2024/3/15"。现在需要生成一份通知文件,要求日期显示为"2024年03月15日"这种中文格式。直接修改单元格格式只能改变显示效果,没法把格式化后的日期用到文本拼接中。TEXT 函数可以直接输出指定格式的文本:
=TEXT(A2, "yyyy年mm月dd日")
A2 中的日期 2024/3/15 被转换为文本"2024年03月15日"。格式代码中的 yyyy 代表四位年份,mm 代表两位月份(不足两位前面补零),dd 代表两位日期。
如果只需要年份和月份,格式代码改为"yyyy年m月",输出就是"2024年3月"——小写 m 不补零,mm 才补零。
财务报表中的金额数字需要加上千分位逗号,方便阅读。B 列的采购金额是纯数字 1234567,要转换为"1,234,567"的格式:
=TEXT(B2, "#,##0")
格式代码 #,##0 的含义是:每三位数字用逗号分隔,至少显示一位数字(0 的作用是当数值为 0 时显示"0"而不是空白)。
百分比的转换也很常见。C 列的达成率存储为小数 0.8735,需要显示为"87.35%":
=TEXT(C2, "0.00%")
格式代码 0.00% 表示以百分比形式显示,保留两位小数。
格式代码的种类不少,实际工作中高频使用的就这几种:
格式代码中的 # 和 0 有一个关键区别:# 表示"有数字就显示,没有就不显示",0 表示"没有数字也要用零占位"。所以 "#,##0" 在数值为 0 时显示"0",而 "#,###" 在数值为 0 时显示空白。
TEXT 函数最常见的实际用途是配合文本拼接。假设要生成一段通知文字:"入职日期:2024年03月15日,月薪:12,500元",A2 是入职日期,B2 是月薪数字,公式写法:
="入职日期:"&TEXT(A2,"yyyy年mm月dd日")&",月薪:"&TEXT(B2,"#,##0")&"元"
如果不用 TEXT 函数直接拼接,日期会变成一串序列号(如 45366),数字也没有千分位,生成的文本完全不可读。TEXT 函数在拼接之前先把值"翻译"成人能看懂的格式,再交给 & 拼接起来。

LEN 函数用来计算一个单元格中文本的字符个数。语法极其简单:
=LEN(文本)
A2 中输入"Excel入门",=LEN(A2) 返回 7。五个英文字母加两个中文汉字,一共 7 个字符。
LEN 函数对中文和英文一视同仁——每个字符(无论中文、英文、数字、标点、空格)都算一个。这一点在统计身份证号、手机号长度时非常方便:
Excel 中还有一个 LENB 函数,它按字节计数——英文字母占 1 个字节,中文字符占 2 个字节。在需要区分中英文字符长度的场景下会用到 LENB,但日常使用中 LEN 就够了。
数据验证不仅能做下拉菜单,还能限制单元格的输入内容长度。手机号必须是 11 位,身份证号必须是 18 位——可以用 LEN 函数作为验证条件,从源头拦截错误录入。
以限制手机号列只能输入 11 位为例:
选中手机号列的数据区域(如 D2:D500)。
点击「数据」选项卡 →「数据验证」,在「设置」选项卡中,「允许」下拉框选择「文本长度」,「数据」选择「等于」,「长度」填入 11。
切换到「出错警告」选项卡,样式选「停止」,标题填"格式错误",错误信息填"手机号必须为11位",点击「确定」。
设置完成后,如果在 D 列输入了 10 位或 12 位的号码,Excel 立即弹出错误提示,拒绝录入。只有输入正好 11 位的内容才能通过验证。
同样的逻辑也可以用于身份证号——「允许」选「文本长度」,「数据」选「等于」,「长度」填 18。这比肉眼检查 18 位数字的长度可靠得多。
如果表格已经录入了大量手机号,需要检查哪些号码长度不对,可以在旁边加一列辅助列:
=LEN(D2)
把公式下拉到所有数据行,辅助列中不是 11 的那些行就是有问题的手机号。配合条件格式把不等于 11 的单元格标红,异常数据一目了然。
LEFT、RIGHT、MID 三个函数分别从文本的左侧、右侧、中间位置提取指定数量的字符。三个函数配合使用,可以把一段长文本中任意位置的信息拆出来。
LEFT 从文本左侧开始,提取指定数量的字符。
=LEFT(文本, 字符数)
RIGHT 从文本右侧开始,提取指定数量的字符。
=RIGHT(文本, 字符数)
MID 从文本中间的指定位置开始,提取指定数量的字符。
=MID(文本, 起始位置, 字符数)
MID 比 LEFT 和 RIGHT 多了一个参数——起始位置,指的是从第几个字符开始提取。起始位置从 1 开始计数,不是从 0 开始。
身份证号一共 18 位,内部结构是固定的:前 6 位是地区码,第 7 到 14 位是出生日期(格式为 yyyymmdd),最后 4 位是顺序码和校验码。利用这个固定结构,三个函数可以把身份证号拆解开。
假设 A2 中的身份证号是 310104199503121234:
提取前 6 位地区码:
=LEFT(A2, 6)
结果是"310104",代表上海市徐汇区。
提取第 7 到 14 位出生日期:
=MID(A2, 7, 8)
从第 7 个字符开始,提取 8 个字符,结果是"19950312"。如果需要显示为"1995-03-12"的格式,可以进一步拼接:
=MID(A2,7,4)&"-"&MID(A2,11,2)&"-"&MID(A2,13,2)
输出"1995-03-12"。
提取后 4 位顺序码和校验码:
=RIGHT(A2, 4)
结果是"1234"。其中第 17 位数字可以判断性别——奇数为男性,偶数为女性。要单独取出第 17 位:
=MID(A2, 17, 1)
结果是"3",奇数,男性。

手机号 11 位的结构同样有规律:前 3 位是运营商号段,中间 4 位是地区编码,后 4 位是用户编号。
假设 B2 中的手机号是 13812345678:
提取前 3 位运营商号段:
=LEFT(B2, 3)
结果"138",属于中国移动号段。
提取后 4 位用户编号:
=RIGHT(B2, 4)
结果"5678"。
手机号脱敏处理——隐藏中间四位:
对外展示手机号时,中间四位通常要用星号替换。把前 3 位、四个星号、后 4 位拼起来:
=LEFT(B2,3)&"****"&RIGHT(B2,4)
输出"138****5678"。这个公式在客户信息导出、报表对外发送时非常实用。
LEFT、RIGHT、MID 返回的结果都是文本类型,即使提取的内容看起来是数字。如果需要对提取结果做数值计算(比如用出生年份算年龄),要在外面套一层 VALUE 函数把文本转为数字:=VALUE(MID(A2,7,4))。
上面的例子中已经多次用到 & 符号来拼接文本。Excel 还提供了两个专门的文本连接函数——CONCAT 和 TEXTJOIN,在处理多个单元格拼接时比 & 更方便。
CONCAT 把多个文本值按顺序拼接成一个字符串,参数之间用逗号分隔。
=CONCAT(文本1, 文本2, 文本3, ...)
A2 是"张",B2 是"伟",C2 是"财务部",要拼出"张伟-财务部":
=CONCAT(A2, B2, "-", C2)
CONCAT 也可以接受单元格区域作为参数。A2:C2 三个单元格的内容分别是"订单""2024""001",写法:
=CONCAT(A2:C2)
结果是"订单2024001",三个单元格的内容被依次拼接,中间没有任何分隔符。
CONCAT 的局限在于它不支持自动添加分隔符。如果需要在每段文本之间插入横线、逗号或空格,必须手动把分隔符作为参数写进公式里。当拼接的单元格数量较多时,公式会变得很长。
TEXTJOIN 是 CONCAT 的升级版,额外支持两个能力:指定分隔符、忽略空单元格。
=TEXTJOIN(分隔符, 是否忽略空值, 文本1, 文本2, ...)
第一个参数是分隔符,用英文双引号括起来;第二个参数是逻辑值 TRUE 或 FALSE,TRUE 表示跳过空单元格,FALSE 表示空单元格也拼进去(会产生连续的分隔符)。
A2 到 E2 五个单元格分别是"广东省""广州市""天河区""中山大道""100号",要用空格拼接成完整地址:
=TEXTJOIN(" ", TRUE, A2:E2)
输出"广东省 广州市 天河区 中山大道 100号"。如果 D2 是空的,因为第二个参数是 TRUE,结果直接跳过空值,输出"广东省 广州市 天河区 100号",不会出现两个连续空格。
如果第二个参数改为 FALSE:
=TEXTJOIN(" ", FALSE, A2:E2)
D2 为空时输出"广东省 广州市 天河区 100号"——空单元格的位置保留了分隔符,产生了两个连续空格。
两个函数的核心区别在于分隔符和空值处理:
用一个实际场景来对比。A2 到 F2 六个单元格存放的是一个产品的六级分类标签,中间可能有空值:
用 CONCAT 实现横线分隔,需要这样写:
=CONCAT(A2,"-",B2,"-",C2,"-",D2,"-",E2,"-",F2)
如果 D2 为空,结果中会出现连续的两个横线"电子产品-手机-配件--保护壳-透明款"。
用 TEXTJOIN 只需要一行:
=TEXTJOIN("-", TRUE, A2:F2)
D2 为空时自动跳过,输出"电子产品-手机-配件-保护壳-透明款",干净利落。

TEXTJOIN 在 Excel 2016 中不可用。如果需要兼容旧版本,只能用 CONCAT 或 & 符号手动拼接。Microsoft 365 订阅版本始终支持 TEXTJOIN。
生成文件编号: 公司的文件编号规则是"部门缩写-年份-流水号",A2 是部门缩写"HR",B2 是年份 2024,C2 是流水号 15。流水号需要补零为三位数:
=TEXTJOIN("-", TRUE, A2, TEXT(B2,"0000"), TEXT(C2,"000"))
输出"HR-2024-015"。这里 TEXT 函数和 TEXTJOIN 配合使用,先把数字转为指定格式的文本,再用横线拼接。
合并多行地址信息: 客户信息表中省、市、区、街道分四列存放,需要合并为一列完整地址,每部分之间不需要分隔符:
=TEXTJOIN("", TRUE, A2:D2)
输出"广东省广州市天河区中山大道西100号"。分隔符设为空字符串,各段文本无缝拼接。
文本函数的核心价值在于把「看到」变成「用到」。身份证号里的出生日期,你能看到但没法直接拿来排序和筛选;日期格式不统一的数据,你看着别扭但没法直接拼进文件名里。TEXT 把格式标准化,LEN 做长度校验,LEFT、RIGHT、MID 精确提取目标片段,CONCAT 和 TEXTJOIN 把碎片重新拼装——这几个函数组合起来,就是一条完整的文本加工流水线。