178

我有一个包含字符串列表的 Excel 电子表格。每个字符串由几个单词组成,但每个字符串中的单词数量不同。

使用内置 Excel 函数(无 VBA),有没有办法隔离每个字符串中的最后一个单词?

例子:

  你被归类为人类吗?-> 人类?
否定,我是肉冰棒->冰棒
                  阿齐兹!光!-> 光!
4

15 回答 15

224

这个已经过测试并且确实有效(基于 Brad 的原始帖子):

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

如果您的原始字符串可能包含管道“|” 字符,然后用不会出现在您的源中的其他字符替换上面的两个字符。(我怀疑布拉德的原作被破坏了,因为翻译中删除了一个不可打印的字符)。

奖励:它是如何工作的(从右到左):

LEN(A1)-LEN(SUBSTITUTE(A1," ",""))– 原始字符串中的空格计数
SUBSTITUTE(A1," ","|", ... )– 仅用 a 替换最后一个空格|
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," ",""))))))
于 2008-12-08T18:27:04.290 回答
90

这是我成功使用的技术:

=TRIM(RIGHT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))

要获取字符串中的第一个单词,只需从 RIGHT 更改为 LEFT

=TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))

此外,将 A1 替换为包含文本的单元格。

于 2012-03-02T01:31:54.400 回答
24

杰里答案的更强大的版本:

=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))

无论字符串的长度、前导或尾随空格或其他任何内容如何,​​它都有效,而且它仍然非常简短和简单。

于 2013-06-01T01:03:56.937 回答
13

我在谷歌上找到了这个,在 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)

[编辑]我没有足够的代表发表评论,所以这似乎是最好的地方......布拉德C的答案也不适用于尾随空格或空单元格......
[第二次编辑]实际上,它不适用于单字也...

于 2008-12-08T18:12:41.497 回答
3
=RIGHT(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))) 
于 2008-12-08T17:52:00.993 回答
3

这是非常干净和紧凑的,而且效果很好。

{=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)))}
于 2010-10-27T01:00:36.230 回答
3
=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) 作为分隔符而不是竖线“|” 以防万一这是所需的文本项。

于 2011-05-13T13:41:20.330 回答
2

要添加到 Jerry 和 Joe 的答案中,如果您想在最后一个单词之前找到文本,您可以使用:

=TRIM(LEFT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))))-LEN(TRIM(A1))))

在 A1 中使用“我的小猫”将导致“我的小”(乔和杰瑞的会给出“猫”

就像 Jerry 和 Joe 隔离最后一个词一样,这将把所有东西都放在那个词的左边(然后把它修剪回来)

于 2013-07-24T07:22:32.297 回答
1

想象一下字符串可以反转。然后真的很容易。而不是处理字符串:

"My little cat" (1)

你和你一起工作

"tac elttil yM" (2)

=LEFT(A1;FIND(" ";A1)-1)A2 中,你得到"My"(1) 和"tac"(2),它是反向"cat"的,即 (1) 中的最后一个单词。

有一些 VBA 可以反转字符串。我更喜欢公共 VBA 功能ReverseString

按照说明安装上述内容。然后在 A1 中使用您的字符串,例如,"My little cat"在 A2 中使用此函数:

=ReverseString(LEFT(ReverseString(A1);IF(ISERROR(FIND(" ";A1));
  LEN(A1);(FIND(" ";ReverseString(A1))-1))))

你会"cat"在 A2 中看到。

上面的方法假设单词用空格分隔。该IF子句适用于包含单个单词的单元格 = 单元格中没有空格。注意:原始字符串TRIMCLEAN很有用。原则上,它从 A1 反转整个字符串,并简单地在反转的字符串中找到与最后一个(反转的)单词(即,"tac ")相邻的第一个空格。LEFT选择这个词,另一个字符串反转重新构成词的原始顺序 ( " cat")。语句-1末尾的删除空白。FIND

这个想法是很容易提取字符串中的第一个(!)单词,LEFTFIND使用第一个空格。但是,对于最后一个(!)单词,RIGHT当您尝试这样做时,该函数是错误的选择,因为不幸的是 FIND 没有您要分析字符串的方向的标志。

因此,整个字符串被简单地颠倒了。LEFTFIND正常工作,但提取的字符串是相反的。但是,一旦您知道如何反转字符串,他就没什么大不了了。公式中的第一条ReverseString语句完成了这项工作。

于 2011-01-21T14:00:37.993 回答
1
=LEFT(A1,FIND(IF(
 ISERROR(
  FIND("_",A1)
 ),A1,RIGHT(A1,
  LEN(A1)-FIND("~",
   SUBSTITUTE(A1,"_","~",
    LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))
   )
  )
 )
),A1,1)-2)
于 2016-07-01T12:33:17.453 回答
1

复制到一列,选择该列,然后 HOME > Editing > Find & Select, Replace:

找什么:

Replace All.

星号后面有一个空格。

于 2017-06-08T03:47:54.610 回答
0

我翻译成 PT-BR,因为我也需要这个。

(请注意,我已将空格更改为,\因为我只需要路径字符串的文件名。)

=SE(ÉERRO(PROCURAR("\",A1)),A1,DIREITA(A1,NÚM.CARACT(A1)-PROCURAR("|", SUBSTITUIR(A1,"\","|",NÚM.CARACT(A1)-NÚM.CARACT(SUBSTITUIR(A1,"\",""))))))
于 2009-08-21T18:29:10.637 回答
0

实现此目的的另一种方法如下

=IF(ISERROR(TRIM(MID(TRIM(D14),SEARCH("|",SUBSTITUTE(TRIM(D14)," ","|",LEN(TRIM(D14))-LEN(SUBSTITUTE(TRIM(D14)," ","")))),LEN(TRIM(D14))))),TRIM(D14),TRIM(MID(TRIM(D14),SEARCH("|",SUBSTITUTE(TRIM(D14)," ","|",LEN(TRIM(D14))-LEN(SUBSTITUTE(TRIM(D14)," ","")))),LEN(TRIM(D14)))))

在此处输入图像描述

于 2016-07-13T09:35:13.577 回答
0

您也可以通过反转字符串并找到第一个空格来实现这一点

=MID(C3,2+LEN(C3)-SEARCH(" ",CONCAT(MID(C3,SEQUENCE(LEN(C3),,LEN(C3),-1),1))),LEN(A1))

  1. 反转字符串

CONCAT(MID(C3,SEQUENCE(LEN(C3),,LEN(C3),-1),1))

  1. 找到反转字符串中的第一个空格

SEARCH(" ",...

  1. 从字符串的长度中取出在反转字符串中找到的空间的位置并返回该部分

=MID(C3,2+LEN(C3)-SEARCH...

于 2021-05-27T10:49:34.857 回答
-1

我也有这样的任务,当我完成后,使用上述方法,我想到了一个新方法:你为什么不这样做:

  1. 反转字符串(“string one”变为“eno gnirts”)。
  2. 使用旧的 Find(从左到右硬编码)。
  3. 再次将其反转为可读字符串。

这听起来如何?

于 2012-10-18T17:38:11.187 回答