首页 > 行业资讯 > 这些问题就别再用IF函数了,怪傻的

这些问题就别再用IF函数了,怪傻的

时间:2021-10-20 来源: 浏览:

这些问题就别再用IF函数了,怪傻的

原创 EH看见星光 Excel星球
Excel星球

AhaExcel

建议常用Excel的职场人关注,海量教程随学随用,随用随查。 主创:看见星光,微软全球最有价值专家、Excel图书作者、培训师。 内容:每日四文,一篇函数教程、一篇VBA教程、一个短视频小技巧、一篇杂文。

收录于话题
#excel 2 个内容
#Excel星球 284 个内容
每天一篇Excel技术图文
微信公众号:Excel星球
NO.1420-如果没有IF

作者:看见星光
 微博:EXCELers / 知识星球:Excel

HI,大家好,我是星光。

前两天给大家分享了 如果通过梳理计算逻辑简化IF函数 」的推文,事后有些朋友在后台留言表达了不同意见。

有朋友认为IF函数不需要简化,应该一层层堆积下去,这样计算逻辑才清楚,也方便后期修改与维护。

甚至有朋友认为里面的VLOOKUP/LOOKUP等解法属于奇巧淫技,毫无存在的意义。

你们要是都持有这样的观点那我可就不困了。

无论是Excel还是其它软件的数据分析,逻辑压缩与简化是再正常不过的事情;而IF函数虽然说是条件判断函数,但条件判断和条件查询本来就是一丘之貉……咳,是一家人。当IF函数嵌套层次超过3层后,被其它查询函数(VLOOKUP/LOOKUP等)代替——简直理所应当。摊手,看我小眼睛,骗你娶你不论男女。

我举3个常见的小栗子。

案例1
连续区间判断
每当Office二级考试来临的那段时间,总有学生跑来问我下面这样类似的问题。
如上图所示,假设有位老 师需要对班级学生的成绩进行评分,其中60分以下不及格,60~69分之间及格,70~79分良好,80~89分优秀,90~100优异,如何用公式对如图所示的表格数据进行评分? 这问题很多人会立刻想到使用IF函数去处理:
解法1  ▼
=IF(B2>90,"优异",IF(B2>80,"优秀",IF(B2>70,"良好",IF(B2>=60,"及格","不及格"))))
其实,这类问题就更适合LOOKUP函数:
解法2  ▼
=LOOKUP(B2, {0;60;70;80;90},{"不及格";"及格";"良好";"优秀";"优异"} )
LOOKUP查询范围升序排列,查找小于或等于查找值的最大值。比如查找89分,在常量数组{0,60,70,80,90}中,小于等于89的最大值是80,于是返回80所对应的结果优秀。 如果你所使用的Excel是2019版或MS365,还可以使用下IFS函数,但依然没有LOOKUP简洁。
解法3  ▼
=IFS(B2<60,"不及格",B2<70,"及格",B2<80,"良好",B2<90,"优秀",B2>=90,"优异")
LOOKUP函数还可以将参数表格化,公式更简洁,对计算标准的修改与维护也更方便。
案例2
多值匹配判断
第2个例子和第一个相似却又不同。 如下图所示,如果B列的数据等于福清/厦门/泉州之一,则返回福建;如果等于枣庄/济南/青岛之一,则返回山东;如果等于徐州/南京之一,则返回江苏。
怎么?你还在想怎么使用IF函数?真是单纯的家伙。
你看,虽然这是一个条件判断问题,但也是一个标准的条件查询问题,所以……试试条件查询大神VLOOKUP函数吧。
如上图所示,在E:F列构建参数表,E列是市,F列是对应的省份。C2单元格只需要输入以下公式,并复制填充至数据表的最后一行,即可获取结果。

=VLOOKUP(B2, $E $2 : $F $9 ,2,0)

如果你觉得参数表是拖油瓶,不想带它玩,可以在编辑栏选中VLOOKUP第2参数按F9键,一键将其转换为常量数组,然后再删除参数表即可。

案例3
多维度区间判断
第3个例子说来和第1个例子还是有点点像……请看图:
A:D是数据源,需要根据B列的性别和C列的体重,在D列进行评级。
如果性别为男,则0~13.6为低体重,13.7~18.4正常,18.5~20.4超重,20.5以上肥胖。
如果性别为女,则0~13.4低体重,13.5~17.8正常,17.9~20.2超重,20.3以上肥胖。

嗯,IF函数……大概是这样的……

= IF (B2= "男" , IF (C2< 13.6 , "低体重" , IF (C2< 18.4 , "正常" , IF (C2< 20.4 , "超重" , "肥胖" ))), IF (C2< 13.4 , "低体重" , IF (C2< 17.8 , "正常" , IF (C2< 20.2 , "超重" , "肥胖" ))))

这还只是一个性别维度,如果再增加年级/年龄等维度呢?听说公式写的越长越复杂水平越流弊?呵呵哒,年轻真好……
公式其实可以写成这样:

=LOOKUP(1,0/( (F$2:F$9=B2)*(G$2:G$9<=C2)*(H$2:H$9>=C2) ),$I$2:$I$9)

如上图所示,在F:I列构建参数表。F列是姓名,G:H列是起、止区间,I列是对应等级。
LOOKUP(1,0/查询条件,查询结果)是函数中经典的多条件查询套路。 (F$2:F$9=B2)*(G$2:G$9<=C2)*(H$2:H$9>=C2) 为查询条件,当B2的性别等于F列,同时C2的体重大于等于G列起始值且小于等于H列的终止值时,则返回对应的等级。
关于LOOKUP更详细的教程推荐阅 读往期推文:
  ↑ LOOKUP函数,从入门到进阶 
…… 三例欧瓦,挥挥手下期再见。
文件下载百度网盘.. https://pan.baidu.com/s/1bgYSSitQ450paGS3pnrRrA 
提取码: 53i1
需要系统学习Excel,却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?加入我的付费社群,和微软最有价值专家(MVP)全面精进Excel,学习+答疑都不再是问题……

加入我的Excel会员, 全面学习Excel
透视表 函数 图表 VBA PQ想学啥学啥

本文由公众号“Excel星球”首发。

点击 阅读原文 ,加入Excel会员社群!

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐