当前位置:  开发笔记 > 后端 > 正文

如何在不使用VBA的情况下在Excel中执行反向字符串搜索?

如何解决《如何在不使用VBA的情况下在Excel中执行反向字符串搜索?》经验,为你挑选了4个好方法。

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

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

例子:

  Are you classified as human? -> human?
Negative, I am a meat popsicle -> popsicle
                  Aziz! Light! -> Light!

BradC.. 203

这个测试并且确实有效(基于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,"* *")其他版本的语法.

当原始字符串在最后位置可能包含空格时,在计算所有空格时添加trim函数:使函数如下:

=IF(ISERROR(FIND(" ",B2)),B2, RIGHT(B2,LEN(B2) - FIND("|",
    SUBSTITUTE(B2," ","|",LEN(TRIM(B2))-LEN(SUBSTITUTE(B2," ",""))))))

+1:我必须记住"LEN(A1)-LEN(SUBSTITUTE(A1,",""))"获取角色实例数的技巧 (3认同)

优秀解决方案 唯一的问题是Excel本地化函数名称,因此您需要重写非英语Excel的公式.以下是俄语版的重写版本:=ПРАВСИМВ(A1;ДЛСТР(A1)-ПОИСК("|";ПОДСТАВИТЬ(A1;"";"|";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1; "";""))))) (2认同)


Jerry Beauca.. 79

这是我用过的非常成功的技术:

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

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

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

另外,用包含文本的单元格替换A1.



1> BradC..:

这个测试并且确实有效(基于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,"* *")其他版本的语法.

当原始字符串在最后位置可能包含空格时,在计算所有空格时添加trim函数:使函数如下:

=IF(ISERROR(FIND(" ",B2)),B2, RIGHT(B2,LEN(B2) - FIND("|",
    SUBSTITUTE(B2," ","|",LEN(TRIM(B2))-LEN(SUBSTITUTE(B2," ",""))))))


+1:我必须记住"LEN(A1)-LEN(SUBSTITUTE(A1,",""))"获取角色实例数的技巧
优秀解决方案 唯一的问题是Excel本地化函数名称,因此您需要重写非英语Excel的公式.以下是俄语版的重写版本:=ПРАВСИМВ(A1;ДЛСТР(A1)-ПОИСК("|";ПОДСТАВИТЬ(A1;"";"|";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1; "";"")))))

2> Jerry Beauca..:

这是我用过的非常成功的技术:

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

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

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

另外,用包含文本的单元格替换A1.


非常聪明的方法.它的作用是用100个空格替换每个空格,然后返回最后100个字符,不带前导/尾随空格.
适合我 - 只用我的分隔符替换了第一个``"`.如果我没有弄错的话,两个`100'似乎将它限制为100个字符的字符串
这应该是这个问题的第一个答案

3> 小智..:

Jerry的答案更强大的版本:

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

无论字符串的长度,前导或尾随空格,还是其他任何内容,它都可以正常工作,而且它仍然非常简短.


这是一个很好的配方.我将公式修改为`= TRIM(右(SUBSTITUTE(TRIM(A1),".",REPT("",LEN(TRIM(A1)))),LEN(TRIM(A1))))`来获取文件延期.
另外一个“ SUBSTITUTE”允许它适用于任何字符,而不仅仅是空格。`= TRIM(SUBSTITUTE(RIGHT(SUBSTITUTE(TRIM(A1)),“ /”,REPT(“ /”,LEN(TRIM(A1)))),LEN(TRIM(A1))),“ /”,“” ))`,其中“ /”是定界字符。

4> Jon..:

我在谷歌上发现了这个,在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的答案也不适用于尾随空格或空单元格...
[第二次编辑]实际上,它不起作用单词要么......

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有