上班第一天差点眼瞎!连夜想出来了if、iferror和find函数嵌套在excel中实现了mysql的模糊查询......

开端

我记得去年我是在周五入职的,第一天就在那签合同、看资料等等。

确切地说是上班第二天,也就是下周一开始干活了。

        还是一样的,为了保护前东家的隐私,我把数据做了虚拟化。A列是就是单位,B列和C列都是业务部门的备注情况说明。而我们需要在D列输入每个小单元都收到了哪些资料--表,B列就是 A资料的情况说明,C列就是B资料和C资料的情况说明。

        不同的人备注习惯不太一样,哪怕是领导要求了统一的备注格式。业务部门的备注还是比较五花八门。就像b列和c列的行文,有的A资料在前有的A资料在后。C列也是一样的。

        用一句话概括这个需求的难点就是--B列和C列的情况说明格式是不会一致的,我们无法判断A、B、C资料出现的位置。

        还有一点就是这三种资料可能存在也可能不存在。

        刚开始领导是让我用筛选器,把三种资料筛出来,再整合到一起。然我就照做了。。。。。。

        就是先把B列中存在A资料的单元格筛选出来,在D列后面写上A资料。再筛选C列的B资料,C列还存在C资料,所以还得再筛一次C资料。最后再把后面这三个单元格整合起来。

        当然了,这样做不是不可以,但是太麻烦了。而且更重要的是源数据表是在在线表格上的,为了不影响业务部门的工作我还不能在在线表格上筛选。因此,我只能先把数据导出来,再筛选整合,最后根据小单元使用vlookup函数将D列的备注匹配回在线表格上。这样的话如果有新增数据就很麻烦,而且备注也是会改动。意味着,每隔一段时间就要这么搞一次,太繁琐了。(当然,事后发现是我想太多了,实际上从后面来看弄得也不多)

        但是为了保护我的眼睛,我选择连夜思考一个函数嵌套来优化这个工作流。

        我是学了一部分excel和mysql才去找工作的,因此那会儿我常会用这两个工具的思路去思考工作。接到任务的第一刻我就想到了用sql的模糊查询(where id like%***%) 。但是excel毕竟能使用在线表,所以我不打算依赖数据库。虽然使用mysql也就几行代码的事哈哈。

        

        因为备注中的资料出现的位置,可能出现在开头、中间、末尾。所以不太可能使用left()和right()函数来判断前后是否存在资料,而且中间的位置在哪也是不好说的。

        但这时我的想法已经初具雏形了,通过模糊查找搜索整个单元格,再使用“&”连接符将它们串起来。也就是B列和C列存在的资料,可以通过函数嵌套直接在D列跳出来。这样做还有一个好处就是我可以直接在在线表格里写函数,这样业务进行备注的时候D列就直接出来了。

        说干就干,但是在干之前呢,还是要先讲讲几个基础函数的用法^_^

if函数

        逻辑判断函数

        如果测试条件为真(true),它就返回真值;如果测试条件为假(false),它就返回假值。看到这个真值突然想到了大学上的一门课叫电工电子学哈哈,好像所有的理工科必学这门课。但感觉这个课只是玩一玩,远不如电气专业和电子专业的同学那么专业(ps:博主是属于生化环材之一的,早知道大一直接转专业到统计学了呜呜呜呜┭┮﹏┭┮)。

        好了,言归正传,我来讲讲我对这个函数的理解。在excel中甚至在很多编程语言中,0代表假值,而0以外的数字代表真值(总感觉我这么说有点怪怪的,有没有高手帮我修正一下哈哈)。

        

        在这种情况下,测试条件填0,函数就会返回9。

        测试条件为0以外的数字,函数就会返回7。

        那我再举一个简单的例子,就用考试成绩来说吧。

        

        如果L列的成绩是在60分以上(包括60),那么就是及格的。如果小于60就是不及格得的。这里就是个逻辑判断,我设定了L列的单元格大于等于60为真,小于60为假。这里就有个隐藏过程了,当L列的分数大于等于60,测试条件就是为真就会返回真值"及格";当L列的分数小于60的时候,测试条件就为假(也就是0),那么就会返回假值"不及格"。

        

find函数

        这是一个定位函数,功能就是定位某个字符在单元格中的位置。

        下面举个具体例子。

        我们要在M列求出"饭"这个字在L列的单元格中出现的位置。

  

      第一个参数--要查找的字符串,就是"饭"这个字。

      第二个参数--被查找字符串,就是L1单元格

      第三个参数--[开始位置],函数中带[]这个符号的参数不填的话它会有默认值。就好像第一章我讲的vlookup函数的最后一函数匹配条件。默认都是0,但是可以填1(它只有0和1这两个选项)。find函数中开始位置这个参数默认是1。意思就是从字符串的第一个字符开始查。在编程语言中,字符串的位置的话第一个字符一般都是0(012345这样排下去),但是在excel中是从1开始的。我觉得可能是excel更多的功能还是办公用的,所以没有做的那么专业。在我眼中excel不只是个办公软件, 它更像是一个小型数据库,而且数据量不大的情况下它真的很方便快捷。可惜没有sql中group by、表连接、子查询的功能。

        

        在这儿我再插一嘴,不要嫌我啰嗦啊哈哈哈哈,细节决定成败!前面的章节讲过,在函数中输入字符,要使用英文的双引号""而不是中文的双引号“”。

        最后结果如下:

        

        点一点发现“饭”字的位置都能对的上O(∩_∩)O       

iferror

        这个函数的意思是,如果值没错,结果就是这个值。如果出错了,我们就不报错,而是返回错误值。有点类似于python中的捕获异常,出现报错先跳过,执行我们的选择。

        但这里会有个误区,就是这个函数中所说的错误,并不是逻辑上的错误。而是excel中的各种差错。

        比如说,。这里5>7在逻辑上错了,但这个函数中不会返回9,而是返回false。

        5>7虽然在逻辑上错了,但是在excel中不算错。它返回的值就是false。

        那么怎样算iferror中的错呢。就是单元格出现的报错(因为不论是true或者是false,都是算一个值)。比如说vlookup缺少匹配值没匹配上就会报错。

       

        在这波匹配中,6没有对应,所以报错了。然后我们在#N/A的右一列边使用一下iferror函数

  

以上就是我今天讲的三个函数。这三个函数的嵌套就可以在excel中实现mysql的模糊查询。

函数嵌套的力量

        以这个B2单元格为先导,把我的思路大致说一说(篇幅有限,全面的思路历程就不说了,走过一次弯路,我将我写出来的第一版的函数嵌套修改了以后才有的最终版)

         由于不清楚A资料的位置,所以需要用到find函数

        

           无论A在哪,只要存在A,这个函数都会有返回值。但是如果A没出现,那么就会报错。、

        既然出现了报错,那么在这里就联想到用ifrror()。那么问题来了,这里iferror这个“错误值”这个参数应该填什么?

1?2?或者3?。我们知道A可能出现在单元格字符串的任何位置,那么存在A的情况返回的数值就有很多可能了。

        但是唯独不可能是0。为什么呢?因为上面已经讲过了,不同于编程语言,excel的字符串没有“0”这个定位。

        因此iferror函数中的错误值这个参数,我们可以填0。这样的话通过这第一层嵌套,我们就可以区分出单元格内存在A或者不存在A        

        

        这个函数就可以做到一个效果:B列单元格存在A就返回A的位置,不存在A就返回0

        这样一分为二后,其实我们就可以使用if函数判断了。无非就是该函数返回0,就说明不存在A,返回的不是0,就说明存在A(管他A在什么位置呢--bushi)

        那么最终的版本来了。

        在if函数中,如果嵌套函数为0,说明A没有出现,此时测试条件为真,if函数返回真值""。真值""就是打两个英文引号,意思就是啥也跳不出来。

        而如果嵌套函数不为0,说明A出现了,此时测试条件为假,if函数返回假值"A资料"。意思就是只要B列单元格出现了A,无论它出现在什么位置,都会跳出“A资料”这三个字。

        然后不要忘记C列的B资料和C资料。我们需要同时显现存不存在ABC,那其实我们可以用&这个连接符号和空格来连接。用空格是因为如果同时存在A,B,C三种资料的话使用空格可以使其看起来不那么拥挤

        &这个符号在excel中就是连接符,专门用来连接的(无论是数字还是字符)

        刚刚说错了,其实现在才是终极版本^_^

        

        这样不就可以在excel中实现mysql模糊查询的效果了嘛,而且把这个函数写在在线表格中就可以让业务部门写完备注直接就跳出情况,干净又卫生啊!

        去年博主就靠着这个函数嵌套第二天就在同事面前装个B,心里不免有点小爽哈哈哈^_^

        接下来看看效果O(∩_∩)O

        

        自动跳出,效果杠杠滴。

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值