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 对比
| MID | LEFT | RIGHT | |
|---|---|---|---|
| 从哪里开始切 | 你指定的任意位置 | 永远是第一个字符 | 永远是最后一个字符 |
| 参数 | 文本 + 起始位置 + 字符数 | 文本 + 字符数 | 文本 + 字符数 |
| 最适合 | 中间片段——区号、两分隔符之间的部分 | 前缀、名字、定宽表头 | 后缀、姓氏、文件扩展名 |
| 动态边界 | 两端都能动——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 文本分列 — 免费