我有一个包含字符串列表的 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!
=LEFT(A1,FIND(IF(
ISERROR(
FIND("_",A1)
),A1,RIGHT(A1,
LEN(A1)-FIND("~",
SUBSTITUTE(A1,"_","~",
LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))
)
)
)
),A1,1)-2)
想象一下字符串可以被反转。那么这就非常容易了。不要对字符串进行操作:
"My little cat" (1)
你正在处理
"tac elttil yM" (2)
使用 =LEFT(A1;FIND(" ";A1)-1)
在 A2 中,你可以得到 (1) 中的 "My"
和 (2) 中的 "tac"
,它是反转的 "cat"
,也就是 (1) 中的最后一个单词。
有一些 VBA 可以用来反转字符串。我更喜欢公共 VBA 函数 ReverseString
。
按照上述说明安装上面的函数。然后在 A1 中输入你的字符串,例如 "My little cat"
,并在 A2 中使用此函数:
=ReverseString(LEFT(ReverseString(A1);IF(ISERROR(FIND(" ";A1));
LEN(A1);(FIND(" ";ReverseString(A1))-1))))
在A2中你会看到"cat"
。
上面的方法假设单词之间用空格分隔。如果单元格中没有空格,则 IF
语句适用于包含单个单词的单元格。注意: TRIM
和 CLEAN
的原始字符串也很有用。原则上,它将从 A1 中反转整个字符串,然后简单地查找反转后的最后一个单词旁边的第一个空格(即"tac "
)。 LEFT
选取这个单词,另一个字符串的反转重组成了单词的原始顺序 (" cat"
)。FIND
语句末尾的-1
去除了空格。
这个想法是容易用LEFT
和查找第一个空格来提取字符串中的第一个单词。然而对于最后一个单词,当你尝试这样做时,RIGHT
函数是错误的选择,因为不幸的是,FIND
没有标志表示您要分析字符串的方向。
LEFT
和 FIND
的工作方式与正常相同,但提取的字符串被颠倒。但一旦你知道如何颠倒一个字符串,这就没什么大不了的了。公式中的第一个 ReverseString
语句就是完成这个工作的。我也翻译成了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,"\",""))))))
您也可以通过反转字符串并找到第一个空格来实现此目的
=MID(C3,2+LEN(C3)-SEARCH(" ",CONCAT(MID(C3,SEQUENCE(LEN(C3),,LEN(C3),-1),1))),LEN(A1))
CONCAT(MID(C3,SEQUENCE(LEN(C3),,LEN(C3),-1),1))
SEARCH(" ",...
=MID(C3,2+LEN(C3)-SEARCH...
我也有过这样的任务,当我完成后,使用上述方法,我想到了一个新方法:为什么不这样做:
这听起来怎么样?