ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E文精选 > 函数与公式 > 逻辑判断小技巧

逻辑判断小技巧

作者:绿色风 分类: 时间:2022-08-17 浏览:177
楼主
gouweicao78
逻辑判断可以算是函数与公式的基本功了,但是不同的人写出来的公式,却也差别甚大,有冗长繁杂的“累赘”,有中规中矩的“易懂”,有天马行空的“精妙”。下面举些例子
1、冗长繁杂型:
(1)多余的判断,比如:ISNUMBER、ISERROR、ISNA等信息函数本身返回的就是逻辑值,一些习惯编程的人,经常会写出
  1. =IF(ISNUMBER(……)=TRUE,……
后面这个=TRUE是没有必要的;
(2)多余的嵌套,比如:“如果A1小于10,返回1,如果A1大于等于10且小于20,返回2,如果A1大于等于20,返回3。”很多初学者见到“且”就想到AND,没有分析嵌套函数本身包含的逻辑关系,用

  1. =IF(A1<10,1,IF(AND(A1>=10,A1<20),2,IF(A1>20,3)))
实际上IF(条件,条件为真时返回的结果,条件为假时返回的结果),上面公式本身第2个IF就是在第1个IF的条件为假的情况下发生的,也就是本身就包含了A1>=10,因此AND是没有必要的,同理,第3个IF也是没有必要的,只需:

  1. =IF(A1<10,1,IF(A1<20,2,3))
2楼
gouweicao78
学习函数要干什么?记得有人在说“有必要钻那么深么”的时候,Apolloh曾回帖说“学习要分目的的”。对,目的决定应该选择的方法。
相信多数人学习Excel是要“用”而不是要“炫”的。如果自己写一个公式,自己都看不懂,那又怎么“用好”它呢?
Excel的函数与公式,是很接近“自然语言”的,因此,写好一个公式,实际上相当于“说好一句话”。
【举例】
那么写出的公式就是:
  1. =IF(B1<>0,A1/B1,"")   
简单易懂。如果要规定A1未输入数据或输入0的时候,也不显示,那么写出的公式就是:
  1. =IF(AND(A1<>0,B1<>0),A1/B1,"")
这两个都是中规中矩的按照常规写法来做。下面从思路的跳跃方面进行分析:

利用逻辑值与数值关系的互换技巧

【前提】既然是A1/B1的计算,当然不会想在A1输入“中国”、B1输入“日本”这样的数据,而是输入数值

【技巧】既然是数值,在逻辑判断中,就可以利用逻辑值与数值的转换关系(参考:逻辑值和数值及文本之间有什么样的关系

【解题】
1、=IF(B1,A1/B1,"")——利用B1是数值,当B1是空单元格或0时,0等价于FALSE。
2、=IF(A1*B1,A1/B1,"")——这哪儿跟哪儿啊,要除的怎么冒了个乘的?解释1:如果A1或B1中有一个0,A1*B1都会等于0而被视为FALSE;解释2:还是数值与逻辑值的关系,把A1看成一个条件,逻辑判断中那么A1<>0可以直接用A1代替,也就是AND(A1<>0,B1<>0)可以直接用AND(A1,B1);或者看成单值计算中的条件相乘(A1<>0)*(B1<>0)
对于解释1、解释2,很明显解释1我们容易理解,解释2似乎枯燥了些,没关系,它实际上是一个可以拓展的思路,包括数组公式中的条件相乘,不正是我们汉语理解里面“条件1成立且条件2成立且……条件n成立”吗。

3楼
gouweicao78
前一讲的例子是逻辑值与数值关系的互换带来的思路,效果明显,思路跳跃一下公式短了很多(嘻嘻,喜欢炫的可以派上用场了,炫一炫,脑袋转一转,脑保健操开始……)

这一讲,想说的是逻辑位置的变换

【举例1】还是公式=IF(B1<>0,A1/B1,""),我们看看变身:=IF(B1=0,"",A1/B1)省略了1个字符,呵呵。
【举例2】公式=IF(A1>=20,3,IF(A2>=10,2,1)),变身:=IF(A1<10,1,IF(A2<20,2,3))省略了2个字符,呵呵。

【举例3】学了数组公式的朋友都很经常看到类似=SMALL(IF(A$1:A$100="张三",ROW($1:$100),65536),ROW(1:1))的公式,有时候在复杂的数组公式中,往往要用到ROW(INDIRECT())等多层嵌套,使用Excel2003的朋友,总在担心7层嵌套限制问题。首先我们分析一下这个公式,意思是满足条件是返回对应行号、否则返回一个大的数字(常用65536来返回那一行的空白单元格,实际上多数人表格根本用不到1万行),那么只要返回的“大数”在范围内,也无所谓65536,主要问题是要ROW($1:$100)怎么弄出来。
变身1:
  1. =SMALL(IF(A$1:A$100<>"张三",65536,ROW($1:$100)),ROW(1:1))——咦?举例1不是刚刚费劲要变短的嘛?
变身2:
  1. =SMALL((A$1:A$100<>"张三")*60000+ROW($1:$100),ROW(1:1))——哈哈,原来变身1是醉翁之意不在酒啊。
看一下,少了个IF函数,少了1层嵌套,耶!参考:用一个通用公式取得字符串中包含的所有数值第10楼

4楼
林卡
好帖子!学习了!,谢谢草版
5楼
apolloh
呵呵,越看越好,越看越爱看!
6楼
apolloh
其实*代替IF,并不是很好。因为IF有个优势,它只计算条件表达式返回true或false所对应的第二或第三个参数的其中一个表达式,而不会两个都计算。

例如=IF(A1>100,A1+B1,0) 和 (A1>100)*(A1+B1),得到的结果相同,但前者在A1<=100的情况下是直接返回0的,而不用计算A1+B1这个表达式,后者则任何情况下都必须计算A1+B1。如果将A1+B1替换为一个复杂运算,那么效率差异就会很明显了。
7楼
红牡丹
好帖子!收藏了~~。越学越不懂E.
8楼
livewire
跟着草版越学越爱上了函数与公式。
9楼
jackeroo
我要跟草草学习,收我吧。
10楼
yanghan52717
非常感谢!
11楼
无心为爱
同意,精彩!~
12楼
水星钓鱼
时间多出来了,慢慢品味佳文来了。
13楼
goldowl
Thanks a lot.
14楼
曾杰2号
谢谢楼主详细讲解啊
15楼
帛易
真是个好帖子,我很是喜欢
16楼
DavidD
厉害!
函数说到这份上,不爱看 看不懂 都成为不可能!
17楼
yncxxmj
好帖子,认真学习,提高技能。
18楼
tongliaozyr
呵呵,越看越好,越看越爱看
19楼
yuezc
感谢两位版主的讲解。
20楼
yuezc
感谢两位版主的讲解。
21楼
ahui21
不错,收藏慢慢体会。
22楼
孟飞
好帖子!收藏了~~。越学越有味.
23楼
cooldiy
妙妙妙,,78544317 这个是学习EXCEL 的群
24楼
yzcyzc1023
非常感谢,收藏。
25楼
杨哨南
非常感谢,收藏
26楼
lrlxxqxa
草版讲解的真好,收藏了!
27楼
赵文竹
呵呵,虽然我等菜鸟还不到精减公式的境界,但看到草版的精彩讲解,还是受益匪浅,谢谢!学习了……
28楼
rzz8118
受益匪浅,谢谢共享
29楼
donghan
学习草版的帖子,潜移默化
30楼
lyglee
gooericao   依稀滴尼不洗!
31楼
lrlxxqxa
真不愧为精华帖!
32楼
liguangtj
很有用啊,有时间一定静下心来学习!
33楼
mjgdxx
学习啦
34楼
mjgdxx
学习啦
35楼
悟空师弟
好贴,收藏了!
36楼
lgh978
感谢两位版主的讲解。
37楼
wangqilong1980
oooO ↘┏━┓ ↙ Oooo

( 踩)→┃踩┃ ←(踩 )

  \ ( → ┃√┃ ← ) /

   \_ )↗┗━┛↖(_ /
38楼
wangqilong1980
非常好用,谢谢版主。
39楼
江河源
正学习中,好贴
40楼
china_yilong
一天学一点
41楼
domydo
学习了,平常用的函数就不精炼,以后尝试楼主的方法
42楼
a216516
感谢分享,IF函数我就是太多花哨了,看了草草写的,真是一语中地呀
43楼
空气
44楼
liuguansky
好贴 。真是好贴 。
45楼
laowuwyx
细微之处见功力,向草版学习!
46楼
天生我才2481
谢谢版主的精辟讲解,学习了!
47楼
海盗老大
好帖,学习了!
48楼
snowangle007
感谢狗尾草的杰作!学习了!
49楼
szchen001
新手崇拜中
50楼
rabbitllu
也算我一个吧,我也要跟草草学习,太棒了。
51楼
军港之夜
对自己在写公式时候调理好自己思路很有帮助,谢谢。
52楼
开心妙妙
精妙的逻辑判断,学习
53楼
双飞叶
不错的学习帖子,
54楼
kmbobo
真是好帖子!说得相当透彻!
55楼
bishunbiao
感受函数魅力,理解其精髓
56楼
穿高跟鞋在跑步
EXECL很强大……文科生表示鸭梨很大……
57楼
资深乞丐
不错!学习……
58楼
神奇网格
讲的真好值得收藏
59楼
痒痒挠儿
学习了,膜拜中
60楼
云龙
非常感谢,学习的同时也要怀着感恩的心,呵呵
61楼
32828225
请制作教程给下载,谢谢楼主的分享!
62楼
wumin88838
不错,收益很多,学习了
63楼
will2013
thanks a lot
64楼
maycomrise
'=IF(ISNUMBER(……)=TRUE,……'您说=TRUE没有必要,我不明白:‘ISNUMBER’返回是逻辑值,它就有=TRUE,或者=FALSE的不同可能,外层的IF函数是针对ISNUMBER返回的不同值有不同的取舍,所以就要确认它返回的到底是TRUE,还是FALSE;如果舍去这个确认,IF的取舍怎么实现呢?
请指教,谢谢!
65楼
gouweicao78
本身If就是要根据第一参数是True 还是False来决定返回第二还是第三参数:
IF(True,1)
IF(TRUE=TRUE,1)还要计算一下第一参数等式得到true(表示True=True成立),所以是多余的
66楼
gouweicao78
本身If就是要根据第一参数是True 还是False来决定返回第二还是第三参数:
IF(True,1)
IF(TRUE=TRUE,1)还要计算一下第一参数等式得到true(表示True=True成立),所以是多余的
67楼
maycomrise
知道了,谢谢!
我还以为必须要判断一下才行,其实IF本身是可以直接看第一参数是true还是false,受教了!
68楼
kaka1688
有用,谢谢
69楼
kaka1688
很好的贴
70楼
hustclm
确实是,其实这跟一个人平时的思维习惯有很大的关系
71楼
ifljh
一定要好好学习函数。
72楼
youzhaodi
普及贴啊
73楼
poiuyman5
Logic is everything of universal
74楼
yirenxiangtao
75楼
buwenhl
好好学习一下
76楼
382224811
77楼
731w
明白了很多。
78楼
友宝贝
好 好
79楼
poiuyman5
good
80楼
poiuyman5
good
81楼
yirenxiangtao
支持gouweicao78
82楼
老百姓
支持支持
83楼
wumin88838
很多文章可以看看
84楼
老百姓
A2>90

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap