MICROSOFT

EP12. “Substring 提取子字符串”

首页 Microsoft 工具 Excel · Functions · Text · EP12
约 6 分钟· #EP12#Excel#Text
🔒 登录后可标记已读
  • Excel 没有一个叫 SUBSTRING 的函数
  • 要提取字符串中间某一段内容,得靠 MID、LEFT、RIGHT 搭配 FIND、LEN 组合出来
  • 这篇整理五种常见的提取场景
  • 前置知识建议先看过 EP04 的 FIND 函数
  • 学完能应付各种「从一串文字里挖出某一段」的需求

重点内容


函数速查

函数语法用途例子
MID=MID(text,start_num,num_chars)从中间指定位置提取指定长度=MID("Excellent",7,6) 从第 7 位开始取 6 个字符
LEFT=LEFT(text,[num_chars])从左边提取=LEFT(A1,5)
RIGHT=RIGHT(text,[num_chars])从右边提取=RIGHT(A1,4)

提取场景怎么选

场景方法例子
已知起始位置和长度MID=MID(A1,7,6)
提取分隔符前的内容LEFT + FIND=LEFT(A1,FIND("-",A1)-1)
提取分隔符后的内容RIGHT + LEN + FIND=RIGHT(A1,LEN(A1)-FIND("-",A1))
提取括号中间的内容MID + 两个 FIND=MID(A1,FIND("(",A1)+1,FIND(")",A1)-FIND("(",A1)-1)
不想写公式,规律好识别Flash FillCtrl + E,但结果是死数据
Excel 365,按分隔符前后提取TEXTBEFORE / TEXTAFTER比传统组合简单很多

方法一:MID 从中间提取

=MID(A1,7,6),从第 7 个字符("O")开始,往后取 6 个字符。


方法二:LEFT 从左边提取,搭配 FIND 定位分隔符

比如要提取破折号前的内容:

=LEFT(A1,FIND("-",A1)-1)

先用 FIND 找到破折号的位置,再用 LEFT 截取到破折号前一个字符——注意要减 1,否则会把破折号本身也截进去。


方法三:RIGHT 从右边提取,搭配 LEN 和 FIND

比如要提取破折号后的内容:

=RIGHT(A1,LEN(A1)-FIND("-",A1))

用整串长度减去破折号所在位置,得到破折号后面还剩几个字符,再用 RIGHT 截取。


方法四:提取括号中间的内容

先用 FIND 分别定位左括号 ( 和右括号 ) 的位置,再用 MID 截取两者之间的内容,起始位置要在左括号位置基础上加 1(跳过括号本身):

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


方法五:提取包含特定文本的子字符串(进阶)

用 SUBSTITUTE、REPT(重复字符)、MID、TRIM 组合,处理更复杂的"定位并提取某个关键词周围内容"的场景;如果计算出的位置可能是负数,用 MAX 函数确保结果至少是 1,避免公式报错。


其他做法

  • Flash Fill:能自动识别提取规律,但生成的是死数据,不是公式(跟 EP01 的说明一样,源数据变了不会自动更新)
  • Excel 365 的 TEXTBEFORE / TEXTAFTER 函数:直接按分隔符提取"之前"或"之后"的内容,比传统 FIND+LEFT/RIGHT 组合简单很多

学完你会

  • ✅ 能用 MID/LEFT/RIGHT 搭配 FIND、LEN 从字符串中间提取指定内容
  • ✅ 能提取括号、破折号等分隔符前后或中间的内容
  • ✅ 知道 Excel 365 的 TEXTBEFORE/TEXTAFTER 能大幅简化传统组合公式

常见错误

  • 用 FIND 定位分隔符后,忘记加 1 或减 1 调整位置,导致提取结果多了或少了分隔符本身
  • 处理括号提取时,左右括号位置的加减顺序搞反,导致提取长度算成负数、公式报错
  • 遇到旧版本 Excel(非 365)却想用 TEXTBEFORE/TEXTAFTER,函数不存在会直接报错

Sources

Blog / Website:

  1. Substring