我有一个包含字符串列表的Excel电子表格。每个字符串由几个单词组成,但是每个字符串中的单词数量不同。
使用内置的Excel函数(无VBA),是否可以隔离每个字符串中的最后一个单词?
例子:
您被归类为人类吗?->人类? 负面的,我是肉冰棍->冰棍 阿齐兹!光!->轻!
我有一个包含字符串列表的Excel电子表格。每个字符串由几个单词组成,但是每个字符串中的单词数量不同。
使用内置的Excel函数(无VBA),是否可以隔离每个字符串中的最后一个单词?
例子:
您被归类为人类吗?->人类? 负面的,我是肉冰棍->冰棍 阿齐兹!光!->轻!
Answers:
该代码已经过测试并且可以正常工作(基于Brad的原始帖子):
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1," ","|",
LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))
如果您的原始字符串可能包含竖线“ |” 字符,然后用不会在您的源代码中出现的其他字符替换上面的两个字符。(我怀疑Brad的原件已损坏,因为在翻译中删除了无法打印的字符)。
奖励:工作原理(从右到左):
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," ",""))))))
这是我成功使用的技术:
=TRIM(RIGHT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))
要获得字符串中的第一个单词,只需从RIGHT更改为LEFT
=TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))
另外,将A1替换为包含文本的单元格。
" "
用我的分隔符替换了第一个。100
如果我没记错的话,这两个S似乎会将其限制为100个字符的字符串
=TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(A1, ".", REPT(".", 100)), 100), ".", ""))
杰里的答案的更强大的版本:
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
无论字符串的长度,前导或尾随空格或任何其他内容,该方法都有效,并且仍然非常简短。
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
以获取文件扩展名。
SUBSTITUTE
允许它适用于任何字符,而不仅仅是空格。=TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),"/",REPT("/",LEN(TRIM(A1)))),LEN(TRIM(A1))),"/",""))
,其中“ /”是定界字符。
" ; "
有输入值的定界符示例:(由空格包围的分号):"Technology Sprint 24 ; Sprint 4"
它返回:"; Sprint 4"
。我正在使用由@PProteus改编的解决方案。
TRIM(A1)
为:TRIM(SUBSTITUTE(A1, "strDelimeter", ";"))
在所有位置,以拥有新的字符定界符: ";"
或者甚至更好地使用char()
函数查找一些真正意想不到的角色。
TRIM
在SUBSTITUTE
为一般情况下的单字符解决方案添加第二个字符之后,您不需要该函数。该公式消除了该部分,从而提供了预期的结果:=SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1),";",REPT(";",LEN(TRIM(A1)))),LEN(TRIM(A1))),";","")
我在Google上找到了此文件,并在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(TRIM(A1),LEN(TRIM(A1))-FIND(CHAR(7),SUBSTITUTE(" "&TRIM(A1)," ",CHAR(7),
LEN(TRIM(A1))-LEN(SUBSTITUTE(" "&TRIM(A1)," ",""))+1))+1)
这非常健壮-适用于没有空格,前导/后缀空格,多个空格,多个前导/后缀空格的句子……并且我将char(7)用作分隔符,而不是竖线“ |” 以防万一这是所需的文本项。
这是非常干净和紧凑的,并且效果很好。
{=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(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))
想象一下,字符串可以颠倒。那真的很容易。而不是处理字符串:
"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
子句适用于包含单个单词的单元格=单元格中无空格。注意:TRIM
和CLEAN
原始字符串也很有用。原则上,它从A1反转整个字符串,并简单地在反转字符串中找到最后一个(反转)单词(即"tac "
)旁边的第一个空格。LEFT
选择该单词,然后另一个字符串反转构成单词(" cat"
)的原始顺序。将-1
在年底FIND
语句删除空白。
这个想法是很容易提取与字符串中的第(!)字LEFT
和FIND
荷兰国际集团的第一个空白。但是,对于last(!)单词,RIGHT
尝试执行此功能时选择的函数是错误的,因为不幸的是FIND没有要分析字符串的方向的标志。
因此,整个字符串被简单地颠倒了。LEFT
并FIND
正常工作,但提取的字符串反转了。但是,一旦您知道如何反转字符串,他就没什么大不了的了。ReverseString
公式中的第一条语句完成了这项工作。
实现此目的的另一种方法如下
=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)))))
我也有这样的任务,完成后,使用上述方法,我想到了一个新方法:为什么不这样做:
听起来如何?