财务经理人网|财智东方.财务经理人网-致力于财务管理实践、打造卓越财务经理人!

QQ登录

只需一步,快速开始

返回列表 发新帖

[分享]逻辑判断函数_IF

[复制链接]

37

主题

85

帖子

170

积分

会计师

Rank: 2Rank: 2

积分
170
发表于 2008-6-27 20:26:00 |显示全部楼层 | 阅读模式

马上注册,结交更多财务经理人,享用更多功能,成就财务总监之路……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x




IF
函数

根据一个条件的真假判断(结果为逻辑值TRURFAALSE),再根据逻辑值的真假(TRUE为真,FALSE为假)来返回不同的结果。

利用IF函数可以对数据或公式进行条件检测。

语法:

IF(logical_test,value_if_true,value_if_false)

Logical_test:条件判断,表示计算结果为TRUEFALSE的值或表达式,如果是表达式,一般都包含比较运算符,logical_text也可以使用其他公式来返回数值或表达式。

Value_if_true:当logical_testTRUE时要返回的值,value_if _true也可以使用其他公式或表达式来返回结果,如A1-B1+F3*3

Value_if_false:当logical_testFALSE时要返回的值,value_if_false也可以使用其他公式或表达式来返回结果,如A1+B1>C1*2

函数 IF 最多可以嵌套七层,用参数value_if_true value_if_false来进行较复杂的判断条件。

注:当logical_test为一数值时,只要logical_test不等于0,不管是正数、负数、整数还是小数,条件都为TRUE,等于0时,才作FALSE计算。

一、单条件判断

只有一个条件的判断,简称为单条件判断。

例一

如图1,根据B2:B7的成绩,如果成绩大于或等于60分,在C2:C7显示及格,否则结果为不及格。

输入C2公式:=IF(B2>=60,"及格","不及格")

再把公式向下复制。

其中:就是参数Logical_testB2>=60

value_if _true"及格"


如果logical_testTRUE时的返回值。

value_if _false"不及格"


如果logical_testFALSE时的返回值。

例二

如图1,根据B2:B7的成绩,如果成绩大于或等于85分,在C2:C7显示为优秀,低于85分的,就什么也不显示(零字符空文本)。

C2公式为:=IF(B2>=85,"优秀","")

再把公式向下复制。

例三

如图2所示,在D2:E10求出各条记录有无余额,如果有余额,就求出余额多少,如果余额为0,就显示文本“无“。

E2公式为:=IF(D2,D2,"")

这个公式里,参数logical_test就是一个值,不管这个值的大小,只要是非0值,就是TRUE,因此,在这个公式里就不必使用比较运算符<>组成一个表达式(D2<>0)来进行比较判断,直接用=IF(D2,value_if_true,value_if_false),简化了公式。

例四

如图2,不使用D列,直接在E列求出同样的结果。

E2=IF(B2-C2,B2-C2,"")

在这个公式里,logical_test参数就是一个公式B2-C2,用B2-C2的值来返回一个值,再判断这个值是否为0,如果不为0,则返回value_if_true,如果为0,则返回value_if_false

图1:

图2:


[此贴子已经被作者于2008-6-27 20:34:09编辑过]

37

主题

85

帖子

170

积分

会计师

Rank: 2Rank: 2

积分
170
发表于 2008-6-27 20:39:00 |显示全部楼层
财务BP与传统财务的区别是什么	2022.02.08 (周二)

二、多条件判断

两个或两个以上的条件判断,称为多条件判断。

多条件判断的IF函数,就必须使用IF嵌套函数。

嵌套函数是指函数的参数本身也一个函数,可以多层嵌套, Excel 11.0Excel 2003)及以前的Excel版本,对嵌套函数最多只能到嵌套七层,多于七层的,必须用别的方法解决,如:定义名称、用文本运算符(和号&)连接公式或用其他函数解决,后面将会对嵌套超过七层的解决方法进一步介绍。

多条件判断的IF函数,其参数value_if _truevalue_if_false至少有一个参数也是一个独立的IF函数(这里指只用IF函数,否则也可以用其他函数代替)。

例一

value_if_truevalue_if_false有一个为常量,另一个为嵌套函数。

如图3,用IF公式求出,如果成绩在90分以上(含90分),结果为优秀;成绩在75分以上(含70分),结果为良好;成绩在60分以上(含60分),结果为及格;否则(60分以下),结果为不及格。

公式1

=IF(B2>=90,"优秀",IF(B2>=75,"良好",IF(B2>=60,"及格","不及格")))

先判断B2是否>=90,如果条件成立,结果返回“优秀”,如果条件不成立,结果返回参数value_if_false :IF(B2>=75,"良好",IF(B2>=60,"及格","不及格"))的结果,这也是一个IF函数(嵌套函数),再判断B2是否>=75,如果条件成立,结果返回“良好”,如果不成立,再判断B2是否>=60,如果条件成立,结果返回“及格”,否则返回“不及格”,至此,判断结束。

公式2

=IF(B2>=60,IF(B2>=75,IF(B2>=90,"优秀","良好"),"及格"),"不及格")

这个公式是从小到大依次往上判断,先判断B2>=60是否成立,如果条件成立,返回参数value_if_true: IF(B2>=75,IF(B2>=90,"优秀","良好"),"及格"),进行再次判断,如果条件不成立,直接返回参数value_if_false的值:“良好”。

公式3

=IF(B2<60,"不及格",IF(B2<75,"及格",IF(B2<90,"良好","优秀")))

与公式 1反方向判断,先从B2<60判断,如果条件成立,则返回“不及格”,如果条件不成立,返回参数value_if_false: IF(B2<75,"及格",IF(B2<90,"良好","优秀")),进行再次判断取值,直到最后一个条件B2<90也不成立,就返回“优秀”。

公式4

=IF(B2<90,IF(B2<75,IF(B2<60,"不及格","及格"),"良好"),"优秀")

这个公式与公式2类似,但却是从大到小依次向下判断取值,这里就不多做解释了。

4个公式中,公式1和公式3都是把参数value_if_false作为一嵌套函数,而参数value_if_true都是常量;公式2和公式4正好相反,参数value_if_true作为一个嵌套函数,而参数value_if_false都是常量。

公式5和公式6是初学IF函数者经常会写错的公式。

公式5

=IF(B2>=60,"及格",IF(B2>=75,"良好",IF(B2>=90,"优秀","不及格")))

这个公式错在应该把value_if_true作为嵌套函数,却相反地把value_if_false作为嵌套函数,先判断B2>=60是否成立,如果B2=90B2>=60这个条件已经成立,结果就返回value_if_true,即“及格”,公式也就停止运算了,结果当然是错误的。

公式6

=IF(B2<90,"良好",IF(B2<75,"及格",IF(B2<60,"不及格","优秀")))

这个公式与公式5的错误正好相反,先判断B2<90是否成立,如果B2=50B2<90这个条件已经成立,结果就直接返回“良好”,公式也就停止运算了,结果就会错误。

IF函数讲究个先来后到,先来的先判断,即先判断最外层的IF函数的logical_test参数是否成立,如果不成立,再判断向内一层的IF,这点是初学IF函数时应该特别注意的。

图3:


回复

使用道具 举报

37

主题

85

帖子

170

积分

会计师

Rank: 2Rank: 2

积分
170
发表于 2008-6-27 20:45:00 |显示全部楼层

例二

value_if_truevalue_if_false都是嵌套的函数。

如图4,问题:A1有两种类型(AB),当A1=A”时,如果B1大于3000(含3000),C1结果为“高”,如果B1大于1000(含1000),C1结果为“中”,B1小于1000C1结果为“低”;当A1=B”时,如果B1大于1000(含1000),C1结果为“高”,如果B1大于500(含500),C1结果为“中”,B1小于500C1结果为“低”。

C1公式:

=IF(A1="A",IF(B1>=3000,"",IF(B1>=1000,"","")),IF(B1>=1000,"",IF(B1>=500,"","")))

先判断条件A1="A"是否成立,如果成立,就返回IF(B1>=3000,"",IF(B1>=1000,"",""))的计算结果,如果不成立就返回IF(B1>=1000,"",IF(B1>=500,"",""))的计算结果,因为A1只有两种类型(AB),因此,这里就不用再判断A1不等于AB时的情况了。

这个公式里,value_if_truevalue_if_false参数都是一个嵌套函数。

图4:


回复

使用道具 举报

37

主题

85

帖子

170

积分

会计师

Rank: 2Rank: 2

积分
170
发表于 2008-6-27 20:47:00 |显示全部楼层

三、嵌套超过七层的处理

前面说过,IF函数嵌套最多不能超过七层,如果超过七层,必须借助其他方法解决,下面介绍两种解决方法:定义名称、用和号(&)连接公式。

例一

A1为一数字,要求:A1大于或等于100908070605040302010时,结果分别为:ABCDEFGHIJA1小于10时,结果为:K

方法1:用和号&连接公式。

=IF(A1>=100,"A",IF(A1>=90,"B",IF(A1>=80,"C",IF(A1>=70,"D",IF(A1>=60,"E",IF(A1>=50,"F",IF(A1>=40,"G",IF(A1>=30,"H",""))))))))&IF(A1>=30,"",IF(A1>=20,"I",IF(A1>=10,"J","K")))

和号&前后两个IF函数分别单独计算,再把计算结果用&连接起来。第2IF中的IF(A1>=30,""……)这个条件不能省略,如A1=95&前的公式计算结果为A&后面的公式计算结果为I,最终结果就成为DI了,因此,必须判断如果A1>=30,结果就为空文本("")。

回复

使用道具 举报

37

主题

85

帖子

170

积分

会计师

Rank: 2Rank: 2

积分
170
发表于 2008-6-27 20:49:00 |显示全部楼层

方法2:定义名称法。

单击插入菜单—名称—定义(快捷键CTRL+F3),在弹出的对话框中(图5),“在当前工作簿中的名称”输入if_1,引用位置输入:=IF(A1>=100,"A",IF(A1>=90,"B",IF(A1>=80,"C",IF(A1>=70,"D",IF(A1>=60,"E",IF(A1>=50,"F",IF(A1>=40,"G",IF(A1>=30,"H","")))))))),单击“添加”按钮,公式会自动在引用的单元格前面加上“工作表名!”,表示对该工作表单元格的引用(关于名称的用法,属于Excel基础知识,本书不做详细解释),用同样的方法再定义名称if_2=IF(A1>=30,"",IF(A1>=20,"I",IF(A1>=10,"J","K"))),单击“确定”按钮。

公式就可以直接输入=if_1&if_2

图5:


回复

使用道具 举报

37

主题

85

帖子

170

积分

会计师

Rank: 2Rank: 2

积分
170
发表于 2008-6-27 20:49:00 |显示全部楼层
财务BP与传统财务的区别是什么	2022.02.08 (周二)

例二

A1为○、一、二、三、四、五、六、七、八、九中的一个文本,要求,当A1为上面的文本时分别返回结果:0123456789

方法1:用和号&连接公式。

=IF(A1="",0,IF(A1="",1,IF(A1="",2,IF(A1="",3,IF(A1="",4,IF(A1="",5,IF(A1="",6,IF(A1="",7,""))))))))&IF(A1="",8,IF(A1="",9,""))

这个公式中,由于判断条件是A1=某一文本,不存在前后两个IF公式都符合的条件,因此公式可直接连下去。

方法2:定义名称法。

用上面的方法分别定义名称:

MyIf_1 =IF(A1="",0,IF(A1="",1,IF(A1="",2,IF(A1="",3,IF(A1="",4,IF(A1="",5,IF(A1="",6,IF(A1="",7,""))))))))

MyIf_2 =IF(A1="",8,IF(A1="",9,""))

公式直接输入=MyIf_1&MyIf_2

如果条件更多同样可以用以上的两种方法。
回复

使用道具 举报

37

主题

85

帖子

170

积分

会计师

Rank: 2Rank: 2

积分
170
发表于 2008-6-27 20:53:00 |显示全部楼层

图6:

图7:

图8:


回复

使用道具 举报

37

主题

85

帖子

170

积分

会计师

Rank: 2Rank: 2

积分
170
发表于 2008-6-27 20:54:00 |显示全部楼层

四、用IF函数组建新数组

IF函数可以把几行或几列数组重新排列,组建成新的内存数组。

例一

如果图6,把浅黄色区域(B2:C11)转换为浅青色区域(E2:F11),就是把两列调换一下位置,形成一个新的数据区域。

选定E2:F11,输入多单元格数组公式=IF({1,0},C2:C11,B2:B11),按CTRL+SHIFT+ENTER组合键(以下简称“三键”)结束,也可以定义为名称再输入,定义名称时要用绝对引用。

IF({1,0},就是IF({TRUE,FALSE}的意思,用1代替TRUE,用0代替FALSE以缩短公式。

例二

如图7,取出B211区域中的B2:B11D2:D11,组成新数组,并把D2:D11调到B2:B11的前面,如F2:G11所示:

选定F2:G11,输入数组公式:=IF({1,0},D2:D11,B2:B11),按三键结束。

这是把两列本不相邻的数据组合在一起的例子。

例三:如图7,把D2:D11调到B2:C2的前面,形成如I2:K2的数据,就等于把原来列顺序为BCD,调换位置,形成DBC的顺序:

选定I2:K2,输入数组公式:=IF({1,1,0},IF({1,0},D2:D11,B2:B11),C2:C11),按三键结束。

上面两个例子讲的都是把列调换位置,把行调换位置的方法相同,请读者试试。

例三

把一行多列的一组数据和多行一列的一组数据,组成一组多行两列的新数据。

如图8,把B1:J1A2:A10的数据重新排列,组成如K11092列的数据。

选定K2:L10,输入数组公式:=IF({1,0},TRANSPOSE(B1:J1),A2:A10),按三键结束。

注:TRANSPOSE函数是行、列转置函数,即把行转换为列,把列转换为行。

回复

使用道具 举报

37

主题

85

帖子

170

积分

会计师

Rank: 2Rank: 2

积分
170
发表于 2008-6-27 20:56:00 |显示全部楼层
一个简单的IF函数,啰啰嗦嗦地写了一大堆,不过都是自己一个字一个字地写出来的,没有功劳也有苦劳,没有苦劳也有辛劳,所以请别扔鸡蛋哦…
[此贴子已经被作者于2008-6-27 21:03:35编辑过]
回复

使用道具 举报

0

主题

5

帖子

12

积分

会计员

Rank: 1

积分
12
发表于 2008-6-28 20:10:00 |显示全部楼层
真是不错,我正好打算下点功夫要学好函数,LZ的贴子出现得真及时,学习了,讲得真明白
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部