我有一个包含字符串列表的 Excel 电子表格,每个字符串由多个单词组成,但每个字符串中单词数量不同。
是否有一种方法可以在不使用 VBA 的情况下利用内置的 Excel 函数来分离每个字符串中的最后一个单词?
示例:
Are you classified as human? -> human? Negative, I am a meat popsicle -> popsicle Aziz! Light! -> Light!
我有一个包含字符串列表的 Excel 电子表格,每个字符串由多个单词组成,但每个字符串中单词数量不同。
是否有一种方法可以在不使用 VBA 的情况下利用内置的 Excel 函数来分离每个字符串中的最后一个单词?
示例:
Are you classified as human? -> human? Negative, I am a meat popsicle -> popsicle Aziz! Light! -> Light!
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1," ","|",
LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))
LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
- 原始字符串中空格的数量SUBSTITUTE(A1," ","|", ... )
- 仅将最后一个空格替换为|
FIND("|", ... )
- 查找替换掉的|
(也就是最后一个空格)的绝对位置Right(A1,LEN(A1) - ... ))
- 返回该|
之后的所有字符
编辑: 要考虑源文本不包含空格的情况,请在公式开头添加以下内容:=IF(ISERROR(FIND(" ",A1)),A1, ... )
现在制作整个公式:
=IF(ISERROR(FIND(" ",A1)),A1, RIGHT(A1,LEN(A1) - FIND("|",
SUBSTITUTE(A1," ","|",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))))
或者您可以使用其他版本的=IF(COUNTIF(A1,"* *")
语法。
当原始字符串可能在最后一个位置包含空格时,在计算所有空格时添加一个修剪函数:使函数如下:
=IF(ISERROR(FIND(" ",B2)),B2, RIGHT(B2,LEN(B2) - FIND("|",
SUBSTITUTE(B2," ","|",LEN(TRIM(B2))-LEN(SUBSTITUTE(B2," ",""))))))
这是我一直以来取得巨大成功的技巧:
=TRIM(RIGHT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))
要获取字符串中的第一个单词,只需将RIGHT更改为LEFT
=TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))
同时,将A1替换为包含文本的单元格。
=TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(A1, ".", REPT(".", 100)), 100), ".", ""))
。 - dumbledadJerry的回答有一个更加强大的版本:
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
这个方法适用于任意长度的字符串,包括前后空格和其他情况,并且非常简短易懂。
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
,以获取文件扩展名。 - Adarsh MadrechaSUBSTITUTE
就可以让它适用于任何字符,而不仅仅是空格。=TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),"/",REPT("/",LEN(TRIM(A1)))),LEN(TRIM(A1))),"/",""))
,其中 "/" 是分隔符。 - PProteus" ; "
(由空格包围的分号),输入值为:"Technology Sprint 24 ; Sprint 4"
,它返回:"; Sprint 4"
。我正在使用@PProteus改编的解决方案。 - David LealSUBSTITUTE
以获得单字符解决方案的一般情况后,您不需要使用 TRIM
函数。该公式提供了预期的结果,消除了这部分内容:=SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),";",REPT(";",LEN(TRIM(A1)))),LEN(TRIM(A1))),";","")
。 - David Leal我在谷歌上找到了这个,在 Excel 2003 中测试过,对我有效:
=IF(COUNTIF(A1,"* *"),RIGHT(A1,LEN(A1)-LOOKUP(LEN(A1),FIND(" ",A1,ROW(INDEX($A:$A,1,1):INDEX($A:$A,LEN(A1),1))))),A1)
[编辑]我没有足够的声望来进行评论,所以这似乎是最好的地方...BradC的答案也不能处理尾随空格或空单元格...
[第二次编辑]实际上,它也无法处理单个单词...
=RIGHT(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))
{=RIGHT(A1,LEN(A1)-MAX(IF(MID(A1,ROW(1:999),1)=" ",ROW(1:999),0)))}
它没有为没有空格或一个单词的情况进行错误捕获,但这很容易添加。
编辑:
它处理了尾随空格、单个单词和空单元格的情况。我还没有找到打破它的方法。
{=RIGHT(TRIM(A1),LEN(TRIM(A1))-MAX(IF(MID(TRIM(A1),ROW($1:$999),1)=" ",ROW($1:$999),0)))}
=RIGHT(TRIM(A1),LEN(TRIM(A1))-FIND(CHAR(7),SUBSTITUTE(" "&TRIM(A1)," ",CHAR(7),
LEN(TRIM(A1))-LEN(SUBSTITUTE(" "&TRIM(A1)," ",""))+1))+1)
这个功能非常强大,它可以处理没有空格、前导/尾随空格、多个空格、多个前导/尾随空格的句子……我使用 char(7) 作为分隔符,而不是竖线“|”,以防竖线是所需的文本项。
除了Jerry和Joe的答案外,如果你想要找到最后一个单词之前的文本,可以使用:
=TRIM(LEFT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))))-LEN(TRIM(A1))))