论坛风格切换切换到宽版
  • 2072阅读
  • 0回复

IF不可不用,不可多用 [复制链接]

上一主题 下一主题
离线yoyo
 

发帖
3177
学分
3722
经验
12
精华
19406
金币
5
只看楼主 倒序阅读 使用道具 0楼 发表于: 2009-01-19
一、先说不可不用。  bP8Sj16q  
  if最善于解决非此即彼、非男即女、非阴即阳、非前即后、非有即无的问题。如果问题的H答案H是二选其一,则除了if,没有更好的办法。比如学龄,以7岁为条件,if(H年龄H>=7,"已到学龄","未到学龄"),做这样的判断,任何函数方法都不会更简明于此了。  cWEE%  
  如果我们的问题都是这么简单就好了。  XF Patd  
  有一个著名的数组公式,其内核公式为:if(match(列起点:列终点,列起点:列终点,0)=row(列起点:列终点),row(列起点:列终点),""),作用是在一列中查找重复值各单项的所在行号,这个if就是不可或缺,不可不用的,因为到目前为止还没有其他更简明的办法来达到用公式筛选重复值的目的。但说穿了,if在这里所解决的,仍然还是一个非此即彼的问题。  Qt iDTr  
  再看一例:设A列为H姓名HB列为数值,求姓名甲的数值合计。{=SUM(IF(A1:A15="",B1:B15))},其实也是一类问题,是{=SUM(IF(A1:A15="",B1:B15,0))}的一种简写,叫做非甲即0。而在数组公式中,*号可以用来替代AND+号则可以替代OR,因此也可以进一步简写作{=SUM((A1:A15=F1)*B1:B15)},而且条件越多,越可以体现这种写法的优点,比如再加上一列月份,求甲在3月份的数值合计,你可以省下两个if,多用一个*号就可以了(自己试试?) ? i)f^O  
    二、再来说不可多用。  2VF%@p  
  为什么不可多用?大致是因为:一、会增加公式写入的强度;二、降低公式的可读性;三、降低运算速率;四、不利于脑力的发挥和开掘,使人懒惰。  @Py/K /  
  例一:A1为一个数值,其范围为1-7B1设置公式,按A1数值变化分别等于A-G  m`IC6*  
  先来看看纯粹使用if的解法: @PN#p"KaT  
=IF(A1=1,"a",IF(A1=2,"b",IF(A1=3,"c",IF(A1=4,"d",IF(A1=5,"e",IF(A1=6,"f",IF(A1=7,"g","")))))))  )i~cr2Hk  
  是不是很麻烦?何止是麻烦,假如再增加两个条件,A1的数值范围为1-26B1相应取值为A-Z,你又当如何?  IM:=@a{  
  if的嵌套最大可以为7层,上面的公式已经用到了极限。虽然说可以用一些旁门左道来突破这个限制,但也只是一种堆沙式的H游戏H,如上例,可以采用以下方式:=IF(A1=1,"a",IF(A1=2,"b",IF(A1=3,"c",IF(A1=4,"d",IF(A1=5,"e",IF(A1=6,"f",IF(A1=7,"g","")))))))&IF(A1=8,"h",IF(A1=9,"I",""))……  iocI:b <  
  这样的用法,真是叫人兴味荡然,昏昏欲睡,EXCEL何必还要学下去,还不如去跟儿子摆积木更好玩呢!  pA`+hQNN  
  所以说,if最好不要多用。不是说不能用,而是说用多了会叫人伤心。   :l~ I  
  其实EXCEL里准备了许多办法来替代上面的愚蠢的做法。  Ot:CPm@  
  比如CHOOSE函数。=CHOOSE(A1,"a","b","c","d","e","f","g","h","i"),这是不是方便多了?CHOOSE的参数清单可以有29项之多,一般足够你使用了。如果还不够,那么请看下面:  $k|g"9  
=LOOKUP(A1,{1,2,3,4,5,6,7,8,9;"a","b","c","d","e","f","g","h","i"})
,你可以尽情地输入参数,只要公式H内容H长度允许(规定公式内容长度为1024个字符)。  8yRJD[/S  
  如果真的如例中所举,只是生成A-Z等字母的话,则只需=CHAR(A1+64)就可以了。当然,实际使用中这样的巧合实在是太少了,但作为一种方法还是有提及的必要。  &J55P]7w  
  一个if只能处理一个有无或是否的问题,即使这个问题可能是由诸多小的方面组合而成的。我们可以利用这一点,来达到替代if使用的目的。  ZtV9&rd7  
  例二:公司结算日期为每月24日,账目的月份一栏,如果超过24日,就要记为下月。  YsG%6&zEq  
如果按照普通思路,公式应该是这样的: /|r^W\DV&x  
BS /G("oZ[  
=IF(DAY(A1)>24,IF(MONTH(A1)=12,1,MONTH(A1)+1),MONTH(A1))  =CK4.   
  要用到两个if判断,外层的是判断日期是否大于24,内层的是判断月份是否在12月,因为12月的下月是1月而非13月。现在对比一下下面的公式:  z3`-plE  
=MONTH(DATE(YEAR(A1),MONTH(A1)+1,0)+(DAY(A1)>24))  A3rPt&<a  
  后者用了A1日期当月最后一天的序列值,最重要的是后面加了一个由判断是否大于24而生成的逻辑值,相当于=if(day(a1)>24,1,0)。逻辑值在公式设置中是一个很重要的概念,是对问题本身的逻辑关系的判断,其中TRUE=1FALSE=0,生成的同样是有无或是否的结果,用得恰当,会使你的公式格外生动有趣。 g+DzscIT  
  是不是一定要少用if,以至于该用的也想办法不用?我曾经说,最少用到if的公式往往是最好的公式。之所以用往往来做限制,就是因为我没有根据来做一定如此的定论。凡事都要实事求是,具体情况具体分析。  +~'865{  
  例三:A1为性别,B1为年龄,C1标注是否退休。条件是男60岁,女55岁。  0n@rLF  
  对这个问题,=IF(OR(AND(A1="",B1>=60),AND(A1="",B1>=55)),"退","未退")只用到一个if,但未必就比=IF(B1-IF(A1="",5)>=55,"退","未退")更简洁,尽管后者用到两个if判断。当然我还是反对=IF(AND(A1="",B1>=60),"退",IF(AND(A1="",B1>=55),"退","未退"))这种用法的。 R#xCkl-  
FjK3 .>'  
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
上海财经大学高顿教育CPA培训,垂询请拨打电话021-61507067
快速回复
限100 字节
温馨提示:欢迎交流讨论,请勿纯表情!
 
上一个 下一个