在线 Excel 编辑器
免费使用

MID 函数:语法、示例与错误排查

更新于 2026-10-14 · 免费 · 兼容 Excel 与 Google Sheets

语法

=MID(text, start_num, num_chars)

快速答案

MID 从单元格任意位置取字符:=MID(A2, 4, 4) 把「AE-2026-041」变成「2026」。给它起始位置和字符数,它就切出那段。起始超过文本长度返回空串;起始小于 1 或字符数为负返回 #VALUE!。

语法

=MID(text, start_num, num_chars)
参数含义
text存放待切文本的单元格或字面量。必填。
start_num从第几个字符开始切,从 1 起算——4 就从第四个字符开始。必填,必须 ≥ 1;小于 1 返回 #VALUE!。
num_chars从该位置取几个字符:4 取四个。必填,必须 ≥ 0;为负返回 #VALUE!。

视区域设置不同,参数可能用分号而不是逗号分隔:=MID(A2; 4; 4)。在用逗号作小数分隔符的国家/地区是标准行为。

MID 数的是字符,不是字节也不是词:一个字母、一个数字、一个空格、一个表情都各占一个计数。位置从 1 开始——不存在第 0 个字符,而且 MID 永远不会倒着读。

基本示例

=MID(A2, 4, 4)

定宽数据的主力:产品编码「AE-2026-041」交出年份「2026」,电话号码交出区号,发票号交出流水号——只要有效信息在已知位置、已知长度,就是它的主场。

=MID(A2, FIND("-", A2) + 1, FIND("-", A2, FIND("-", A2) + 1) - FIND("-", A2) - 1)

动态升级版:内层 FIND 找到第一道横杠,外层 FIND 从它之后开始找第二道横杠,MID 切出两杠之间的全部,所以「AE-2026-041」得到「2026」,「US-Q3-772」得到「Q3」——不写死位置。

=MID(A2, SEARCH(" ", A2) + 1, 30)

取第一个空格之后的全部:SEARCH 找到空格,+1 跳过它,30(一个超额计数)安全地抓到单元格剩余部分——「Jane Doe」得到「Doe」,「Winston Churchill」得到「Churchill」。

=IFERROR(MID(A2, FIND("-", A2) + 1, 4), A2)

生产环境版本:没有横杠的行本来会因 FIND 找不到而炸成 #VALUE!。包上 IFERROR 后,这些行原样返回,整列不再崩。

MID 切出来的哪怕是数字也返回文本:MID(123456, 2, 3) 得到文本「234」,不能求和。数字提取要包 VALUE(=VALUE(MID(A2, 4, 4)));另外日期底层是序列号——MID 切的是序列号而不是显示的日期。

常见错误与修复方法

症状最常见原因修复
#VALUE!start_num 小于 1,或 num_chars 为负——或内嵌的 FIND/SEARCH 没找到分隔符,FIND 自己先返回了 #VALUE!。起始用 ≥ 1、计数用 ≥ 0,给查找分隔符的公式包 IFERROR 兜底。
返回空字符串start_num 超过了文本长度——MID 读到末尾之外,什么也取不到。确认文本够长,或用 MIN(start_num, LEN(A2)) 把起始钳在范围内。
切点早一个或晚一个字符分隔符附近差一:+1 跳过它,-1 停在下一个之前。拿一行数一遍——FIND 返回分隔符位置,FIND(...)+1 正好在它后面开始,两个 FIND 之差减 1 就是切片长度。
取出的数字不能计算MID 永远返回文本,所以「007」还是「007」,「234」不求和。=VALUE(MID(A2, 4, 4)) 把切出的数字转成真数值(前导零会丢,它们本来就是文本)。
结果整体后移单元格开头有看不见的填充空格,所以第 4 位并不在你以为的地方。先清洗:=MID(TRIM(A2), 4, 4),或一次性给整列去空格。

不算错误但很经典的 MID 行为:当 start_num 加 num_chars 超过单元格长度时,MID 只取到末尾——不报错也不补位。=MID("Hi", 1, 50) 就是「Hi」。这让超额计数成了「从这儿往后全要」的安全写法。

MID 与 LEFT、RIGHT 对比

MIDLEFTRIGHT
从哪里开始切你指定的任意位置永远是第一个字符永远是最后一个字符
参数文本 + 起始位置 + 字符数文本 + 字符数文本 + 字符数
最适合中间片段——区号、两分隔符之间的部分前缀、名字、定宽表头后缀、姓氏、文件扩展名
动态边界两端都能动——FIND 同时喂给起始和计数只有终点能动(靠 FIND/SEARCH)只有起点能动(靠 FIND/SEARCH 和 LEN)

MID 是通解:=LEFT(A2, 4) 就是 =MID(A2, 1, 4),而 =RIGHT(A2, 4) 在单元格够长时等于 =MID(A2, LEN(A2) - 3, 4)。LEFT 和 RIGHT 是边缘的便利写法;只要片段在中间,三个里只有 MID 能用。

MID 与分列、TEXTBEFORE/TEXTAFTER 对比

MID(+ FIND/SEARCH)分列TEXTBEFORE / TEXTAFTER(Microsoft 365)
输出新列里的活公式,源数据不动就地拆分单元格,不小心会覆盖旁边的列活公式:=TEXTBEFORE(A2, "-") 和 =TEXTAFTER(A2, "-")
分隔符逻辑用 FIND/SEARCH 和 +/- 偏移手搭对话框驱动,重复分隔符可视化处理各一个参数——不用 FIND,不算偏移
两分隔符之间的中间片段原生支持——MID 在两个 FIND 之间切可行但连续拆分很别扭TEXTAFTER(TEXTBEFORE(A2, 分隔2), 分隔1) 叠起来——可读但两个函数
可用版本所有 Excel 版本和 Google Sheets所有 Excel 版本仅 Excel 365 / 2021 及以后

按生命周期选:要扛住反复导入和刷新的解析用 MID 公式,对成品表做一次性整形用分列,Excel 够新且片段只贴着单个分隔符一侧就用 TEXTBEFORE/TEXTAFTER。

Google Sheets 中的 MID

  • 语法和默认值完全一致——上面的公式可原样粘贴到 Sheets。
  • 逗号作小数分隔符的地区用分号:=MID(A2; 4; 4),与 Excel 一样。
  • FIND 仍区分大小写,SEARCH 仍不区分且支持通配符——搭档行为一致。
  • 按模式取中间片段时 Sheets 还有 REGEXEXTRACT,一条表达式就能取「两道横杠之间的全部」,不用嵌套 FIND。

限制与进阶技巧

  • 一次调用只切一刀:把一个编码拆三段需要三列——LEFT、MID、RIGHT 并排是经典解析布局。
  • FIND 和 SEARCH 要有意识地选:空格、横杠这类不区分大小写的分隔符用 SEARCH,「a」和「A」必须区分时用 FIND。
  • 每个靠分隔符的提取都包 IFERROR——否则一行缺分隔符,#VALUE! 就会顺着整列蔓延。
  • 切完的数字仍然是文本:=VALUE(MID(A2, 4, 4)) 是回到可计算数字的路。
  • 超额 num_chars 是特性不是 bug:=MID(A2, SEARCH(" ", A2) + 1, 999) 安全地取「第一个空格之后的全部」,不用先量长度。

把 MID 当作解析流水线的中间站:TRIM 去填充、SEARCH 找第一道分隔符、嵌套 SEARCH 找第二道、MID 切两杠之间的间隙、结果是数字再用 VALUE 转换。每一站独占一列,下个月导入格式变了,只需要改一条公式。

相关工具

相关函数

常见问题

MID 函数在 Excel 中有什么用?

它从单元格任意位置返回一段字符:=MID(A2, 4, 4) 从第 4 位起取 4 个字符。与 LEFT 和 RIGHT 不同,MID 需要起始位置和字符数两个参数,所以能切出任何中间片段。

怎么用 MID 提取两道横杠之间的文本?

找到两道分隔符再切中间:=MID(A2, FIND("-", A2) + 1, FIND("-", A2, FIND("-", A2) + 1) - FIND("-", A2) - 1)。内层 FIND 找第一道,外层 FIND 找第二道,两者之差减 1 就是切片长度。

为什么 MID 返回 #VALUE!?

要么 start_num 小于 1,要么 num_chars 为负,要么内嵌的 FIND/SEARCH 没找到分隔符——FIND 找不到时自己就返回 #VALUE!,MID 跟着继承。起始用 ≥ 1、计数用 ≥ 0,查找部分再包 IFERROR 兜底。

start_num 超过文本长度会怎样?

MID 返回空字符串——它读到末尾之外,什么也取不到。=MID("Hi", 10, 4) 得到「」。这对「有后缀就取、没有就留空」的逻辑很有用,但期待报错的人会意外。

MID 和 LEFT、RIGHT 有什么区别?

MID 从你指定的位置开始,需要起始位置和计数;LEFT 永远从第 1 个字符开始,只需计数;RIGHT 永远从末尾开始,只需计数。MID 是通解——LEFT 和 RIGHT 是边缘的便利写法。

为什么 MID 取出的数字不能计算?

MID 返回文本,它的「234」是标签不是值。用 =VALUE(MID(A2, 4, 4)) 转换——但注意前导零在真数字里会消失,因为它们本来就只是文本。

MID 在 Google Sheets 里能用吗?

能——名字、参数、FIND/SEARCH 搭档和逗号小数地区的分号约定都一样。Sheets 另外还提供基于正则提取的 REGEXEXTRACT,专门取中间片段。

准备好处理你自己的文件了吗?

打开Excel 文本分列 — 免费