发现007,谁的公式更优雅

2022-03-07 17:46:10 浏览数 (1)

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组合键。

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

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

0 人点赞