Excel中如何提取首个与最后一个短横线(-)之间的文本?现有公式适配不全的优化请求
Excel中如何提取首个与最后一个短横线(-)之间的文本?现有公式适配不全的优化请求
嗨,我来帮你搞定这个公式适配的问题~你的核心需求是提取第一个短横线之后、最后一个短横线之前的内容,对吧?原来的公式只针对有至少两个短横线的情况,碰到只有一个短横线(比如xxd - Other Materials)或者末尾没有多余短横线的行就会报错,咱们来调整成通用版的方案:
方案一:适用于Excel 365/2021及以上版本(简化版)
如果你的Excel是较新版本,直接用TEXTAFTER和TEXTBEFORE这两个新函数,逻辑清晰又简单:
=TEXTAFTER(TEXTBEFORE(K132, "-", -1), "-", 1)
TEXTBEFORE(K132, "-", -1):先提取最后一个短横线之前的所有内容TEXTAFTER(..., "-", 1):再从上面的结果里提取第一个短横线之后的内容
不管原文本里有1个、2个还是多个短横线,这个公式都能精准提取你要的内容。
方案二:适用于所有Excel版本(兼容旧版)
如果用的是旧版Excel(没有TEXTAFTER/TEXTBEFORE),可以用经典函数组合实现:
=TRIM(MID(K132, FIND("-", K132)+1, IFERROR(FIND("|", SUBSTITUTE(K132, "-", "|", LEN(K132)-LEN(SUBSTITUTE(K132, "-", "")))) - FIND("-", K132) -1, LEN(K132)-FIND("-", K132))))
我拆解下逻辑帮你理解:
LEN(K132)-LEN(SUBSTITUTE(K132, "-", "")):计算原文本里短横线的总个数SUBSTITUTE(K132, "-", "|", 总个数):把最后一个短横线替换成一个特殊符号|(避免和原文本内容冲突)FIND("|", 替换后的文本):定位到最后一个短横线的位置IFERROR(...):如果文本里只有1个短横线,就直接提取第一个短横线之后的所有内容TRIM():去掉提取内容前后可能的多余空格
为什么原来的公式会失效?
你之前的公式是嵌套查找第二个、第三个短横线的位置,但如果文本里只有1个短横线,FIND函数找不到后续的短横线就会返回错误值,导致整个公式失效。新的方案通过先统计短横线总数、定位最后一个短横线的位置,完美适配了所有情况。
备注:内容来源于stack exchange,提问作者Kelvinlin




