前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >发现007,谁的公式更优雅

发现007,谁的公式更优雅

作者头像
fanjy
发布2022-03-07 17:46:10
2541
发布2022-03-07 17:46:10
举报
文章被收录于专栏:完美Excel完美Excel

007是风靡全球的一系列谍战片,也是影片主人公特工詹姆斯·邦德的代号。然而,这里不是让你找到007这个人,而是判断数据中是否隐藏有007,如下图1所示。

图1

注:本示例来源于chandoo.org。

例如,12304560897从左至右读取时包含007,答案就是Yes。而001002003004没有发现007,返回No。

也就是说,只要数据中从左至右含有007这三个数字代码,即便它们被其他数字分开了,也符合要求,返回Yes,否则返回No。

按照要求,我们可以使用FIND函数先找到第一个0,再找到第二个0,然后再查找第二个0后面的7。

公式中使用:

FIND("0",B3)

找到第一个0。

接着使用:

FIND("0",B3,FIND("0",B3)+1)

找到第二个0。

然后使用:

FIND("7",B3,FIND("0",B3,FIND("0",B3)+1))

找到第二个0后面的7。

如果都找到了,则返回“Yes”,如果其中任一项没找到,则会发生错误,我们进行相应的判断后,返回“No”。

完整的公式如下:

=IF(NOT(ISERR(FIND("0",B3)+FIND("0",B3,FIND("0",B3)+1)+FIND("7",B3,FIND("0",B3,FIND("0",B3)+1)))),"Yes","No")

我们也可以将上面的公式综合一下,使其更简化,得到下面的公式:

=IFERROR(IF(FIND(7,B4,FIND(0,B4,FIND(0,B4)+1))>0,"Yes"),"No")

当然,还可以使用SEARCH函数,公式更简洁。

=IF(ISNUMBER(SEARCH("*0*0*7*",B4)),"Yes","No")

或者:

=CHOOSE(ISERR(SEARCH("0*0*7",B6))+1,"Yes","No")

或者:

=IF(COUNT(SEARCH("0*0*7",B7)),"Yes","No")

或者:

=MID("YesNo",4^ISERR(SEARCH("0*0*7",B8)),3)

这个公式很有想象力!

接下来,就是比较复杂的数组公式了。

大致思路是,先获取数据中最后一个7的位置,如果成功获取,则判断该位置之前的数据中是否至少有2个0,如果有则表明存在007,返回Yes。

数组公式1:

=IF(SUM(IFERROR(IF((MID(LEFT(B9,MAX(IF(MID(B9,ROW(INDIRECT("1:"&LEN(B9))),1)+0=7,ROW(INDIRECT("1:"&LEN(B9))),""))),ROW(INDIRECT("1:"&LEN(B9))),1)+0)=0,1,""),""))>1,"Yes","No")

数组公式2:

=IF(ISERROR(MATCH("7",MID(B10,LEN(B10)-ROW(INDIRECT("A1:A"&LEN(B10)))+1,1),0)),"No",IF(SUM(--(MID(B10,ROW(INDIRECT("A1:A"&LEN(B10)-MATCH("7",MID(B10,LEN(B10)-ROW(INDIRECT("A1:A" &LEN(B10)))+1,1),0)+1)),1)="0"))>=2,"Yes","No"))

注意,在输入完成后,要按Ctrl+Shift+Enter组合键。

好了!你有更优雅的公式吗?欢迎留言。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档