Excel公式:查找一单元格中某字符最后出现位置

编程入门 行业动态 更新时间:2024-10-23 16:21:59

Excel<a href=https://www.elefans.com/category/jswz/34/1769303.html style=公式:查找一单元格中某字符最后出现位置"/>

Excel公式:查找一单元格中某字符最后出现位置

这个需求简单来说,就是从右向左查找字符出现的首个位置,或从左向右查找字符出现的最后位置,例如:
查找“普通人民代表大会发言人任免人选”中,最后一个“人”字的位置,直接的查找是做不到的。
以下是各种公式:(以查找A1单元格中最后一个“@”为例)

1.直线思路公式:
=FIND("☆",SUBSTITUTE(A1, "@", "☆", LEN(A1)-LEN(SUBSTITUTE(A1, "@", ""))))
解释:先通过替换删除法算出原字符串中有多少个“@”,例如n个,然后将第n个“@”替换成“☆”再查找“☆”的位置。

2.行扩展拆分字符公式:
=LOOKUP(1,0/(MID(A1,COLUMN(1:1),1)="@"),COLUMN(1:1))
解释:column(1:1)会自动扩展成第一行的有限列数组(2003版上限256列,2010版上限16384列),然后公式就成了对A1的内容按每个字符拆分成数组,然后比对是否是“@”,是的话会返回逻辑值“True”,用零除运算后,“True”的项会变成“0”,其他变成“#DIV/0”,而对这些项组成的数组查找“1”将等同于查找最后一个“0”,然后给出对应的行号(位置)数字。缺点就是2003版的话字符长度限制大。

3.列扩展拆分字符公式:
=LOOKUP(1,0/(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)="@"),ROW(INDIRECT("1:"&LEN(A1))))
解释:原理同上,只是将行变成列,而且是限制行数为A1内容长度,而行数上限比列数上限大多了。
同样原理还有两种公式:
=LOOKUP(LEN(A1),FIND("@",A1,ROW(INDIRECT("1:"&LEN(A1)))))
原理同上,只是拆分数组的方式是从第n个字符开始查找“@”(小于n的位置值就被忽略),找到就返回位置值,然后对这些位置值组成的数组查找最接近A1内容长度的值,返回。
类似公式,不过需要Ctrl-Shift-Enter三键输入:
=MATCH(LEN(A1),FIND("@",A1,ROW(INDIRECT("1:"&LEN(A1)))))
=MATCH(1,0/(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)="@"))

4.还是列扩展拆分字符公式,需要Ctrl-Shift-Enter三键输入:
=MAX(IF(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)="@",ROW(INDIRECT("1:"&LEN(A1)))))
解释:原理还是同上,不同的是使用了max()。从上面两节的解释可以看到,其实要找也是找最大的位置值,所以可能大多数人一想就会想用Max(),但为什么不行呢——因为max()需要对比数值大小,从而不接受错误值,而lookup()、match()则只是字符匹配,可以略过错误值。为了使用max(),就要用if()来排除错误值项,公式就长了。
要避开使用if(),那么可以使用类似sumproduct()风格的条件式(注意中间的 * 号),需要Ctrl-Shift-Enter三键输入:
=MAX((MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)="@")*ROW(INDIRECT("1:"&LEN(A1))))

5.极致最短公式:
=-LOOKUP(,-FIND("@",A1,ROW(A:A)))
解释:依然是列拆分字符公式,但是行数限制省去了,然后将查找到的位置值取相反数,使位置值全变【从大到小】的负数(强调一下,其绝对值就是【从小到大】),再从中查找最后一个位置值(略过错误值),再取一次相反数获得原来的位置值。
这里要解释一下,为什么相反数了还是查找最后一个位置值?
原理是这样的,lookup()是假定查找的序列(数组或向量)是升序排列的(不像vlookup和match那样可指定假定降序或假定乱序/精确查找),并在这样的假定下进行二分法查找(详情请看【深入理解LOOKUP:LOOKUP函数的查找原理】,返回小于等于目标值的项。因此,lookup()相当于是假定查找序列最大的值在最后,如果找不到和目标值相同的值,那么其返回的就是最后一个非错误值。

6.另类思路公式,需要Ctrl-Shift-Enter三键输入:
=TEXT(LEN(A1)-MATCH("@",LEFT(RIGHT("@"&A1,ROW($1:$99))),)+1,"[>];")

更多推荐

Excel公式:查找一单元格中某字符最后出现位置

本文发布于:2024-03-04 10:41:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1709042.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:公式   单元格   字符   位置   Excel

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!