如何用MID与SEARCH公式提取指定位置分隔符间的文本?
基础公式回顾
- 文本提取:
MID(A1, Start_Num, Num_of_Chars)
从单元格A1的第Start_Num位开始,提取Num_of_Chars个字符 - 文本查找:
SEARCH(Find_text, within_text, start_num)
在within_text中从start_num位置开始查找Find_text,返回其所在位置;省略start_num则从第1位开始搜索
基础组合用法:提取不同分隔符间的内容
比如提取括号包裹的文本:
示例文本A1:Incident Report No.1234, user (Jimbo Jones) Status- pending
公式:=MID(A1, SEARCH("(", A1)+1, SEARCH(")", A1) - SEARCH("(", A1) -1)
提取结果:Jimbo Jones
逻辑拆解
- 锁定目标单元格A1
SEARCH("(", A1)+1:定位左括号位置后+1,跳过左括号作为提取起始点SEARCH(")", A1) - SEARCH("(", A1) -1:用右括号位置减去左括号位置,再-1排除右括号,得到提取的字符长度
如果不用SEARCH,只能手动数位置写死:=MID(A1,32,11),但文本内容变化后就会失效,灵活性极差。
提取相同分隔符(逗号)间的内容
提取第1、2个逗号间的内容
示例文本A1:Incident Report No.1234 user, Jimbo Jones, Status- pending
公式:=MID(A1, SEARCH(",", A1)+1, SEARCH(",", A1, SEARCH(",", A1) +1) - SEARCH(",",A1) -1)
提取结果:Jimbo Jones
找第2个逗号的核心逻辑
公式里的SEARCH(",", A1, SEARCH(",", A1) +1)是关键:
- 内层
SEARCH(",", A1)找到第1个逗号的位置 - 外层
SEARCH把这个位置+1作为新的搜索起点,直接跳过第1个逗号,找到的就是第2个逗号的位置
解决问题:提取第3、4个逗号间的内容
示例文本A1:Incident Report, No.1234, user, Jimbo Jones, Status- pending
完整公式
=MID(A1, SEARCH(",", A1, SEARCH(",", A1, SEARCH(",", A1)+1)+1)+1, SEARCH(",", A1, SEARCH(",", A1, SEARCH(",", A1, SEARCH(",", A1)+1)+1)+1) - SEARCH(",", A1, SEARCH(",", A1, SEARCH(",", A1)+1)+1) -1)
分步拆解逻辑
定位第3个逗号:
- 第1个逗号:
SEARCH(",", A1) - 第2个逗号:
SEARCH(",", A1, 第1个逗号位置+1) - 第3个逗号:
SEARCH(",", A1, 第2个逗号位置+1)
提取起始位置为第3个逗号位置+1(跳过第3个逗号)
- 第1个逗号:
定位第4个逗号:
在第3个逗号位置+1的基础上,再次调用SEARCH,找到的就是第4个逗号的位置计算提取长度:
用第4个逗号位置减去第3个逗号位置,再-1排除第4个逗号,得到要提取的字符数
通用规律:提取任意相邻逗号间的内容
要找第K个逗号,就嵌套K次SEARCH:
- 第1个逗号:
SEARCH(",", A1) - 第2个逗号:
SEARCH(",", A1, 第1个逗号位置+1) - 第3个逗号:
SEARCH(",", A1, 第2个逗号位置+1) - ...
- 第N个逗号:
SEARCH(",", A1, 第N-1个逗号位置+1)
把这个嵌套逻辑套入MID公式,就能提取第N和N+1个逗号间的内容,不管是第3&4、第9&10都适用。
内容的提问来源于stack exchange,提问作者CaptainMacro

