ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: qhm

如何实现函数IF的嵌套超过七层?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-9-15 21:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

TA的精华主题

TA的得分主题

发表于 2005-9-16 11:40 | 显示全部楼层

半榻茶烟"如何实现函数IF的嵌套超过七层"我试了可是返回的值是指定单元格$A$4而不是该指定单元格的的数值!版主请帮忙

TA的精华主题

TA的得分主题

发表于 2005-11-15 09:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
热闹.

TA的精华主题

TA的得分主题

发表于 2006-1-21 13:50 | 显示全部楼层
以下是引用[I]redhh[/I]在2005-9-6 17:04:00的发言:[BR]

我觉得解快IF七层嵌套的问题很简单啊,值得大家这样热烈讨论吗?能否象以下这样实现???

=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=1,1,0)*A1+......实现。

这样子可以吗?

TA的精华主题

TA的得分主题

发表于 2006-1-21 14:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-2-9 20:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

用几个单元格来过渡!

TA的精华主题

TA的得分主题

发表于 2006-2-10 00:17 | 显示全部楼层
如果采用“=”运算符进行判断,是可以做到用“&”连接,但如果是计算个人所得税(共分九级,刚刚超过了7层嵌套)就不行了,比如: A1是薪金,B1输入公式: =IF(A1>=100000,0.45,IF(A1>=80000,0.4,IF(A1>=60000,0.35,IF(A1>=40000,0.3,IF(A1>=20000,0.25,IF(A1>=5000,0.2,IF(A1>=2000,0.15,IF(A1>=500,0.1,""))))))))&IF(A1>0,0.5,0) 在A1中输入大于500以上,那么B1的计算结果就有误。 但采用定义名称的方法就不存在此种错误。
以下是引用[I]半榻茶烟[/I]在2002-10-21 22:40:00的发言:[BR]=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",IF(A1=10,"J",IF(A1=11,"K",IF(A1=12,"L",IF(A1=13,"M",IF(A1=14,"N",IF(A1=15,"O",IF(A1=16,"P",""))))))))& IF(A1=17,"Q",IF(A1=18,"R",IF(A1=19,"S",IF(A1=20,"T",IF(A1=21,"U",IF(A1=22,"V",IF(A1=23,"W",IF(A1=24,"X",""))))))))&IF(A1=25,"Y",IF(A1=26,"Z",""))

TA的精华主题

TA的得分主题

发表于 2006-2-10 02:31 | 显示全部楼层
用数组公式解决 IF() 函数 7 层嵌套问题
Excel 中的函数嵌套最多可有 7 层。
对于 IF(),有些时候可以配合AND(),OR()来解决多层次问题。
不过有些时候用它们是解决不了的,这就需要我们考虑其它的方法。
最开始,我还以为只有 IF() 函数有 7 层嵌套问题,后来用想用 CHOOSE() 替换 IF() 时,才发现 CHOOSE() 也不能做大于 7 层的嵌套。
最后得出:Excel 中可能所有函数都不能超过7层嵌套。

------------------------
对 IF() 7 层嵌套的解决:
------------------------
先看看 IF() 函数的语法:
IF(logical_test,value_if_true,value_if_false),
这里要研究的是 logical_test ,它只能返回 TRUE 或 FALSE ,
而 Excel 中 TRUE 值为1, FALSE 值为0,不过要想体现出 1 和 0 ,
必须对 TRUE 和 FALSE 作加 0 或 乘 1 之类的操作(也就是说把类型转换一下)。
再一点,也是非常关键的一点是:
对于IF()结构来说,只要遇到 logical_test 为 TRUE(按照条件的顺序) ,则结束判断。
原理清楚了之后,就开始实际操作了:
首先,把条件按顺序陈列出来。
比如:A1<-50,-50<=A1<0,A1=0,0<A1<50,...
相当于:IF(A1<-50,...,IF((A1>=-50)*(A1<0),...,IF(A1=0,...,IF((A1>0)*(A1<50),...,...))))
说明:这里的 * 含义为 AND , 之所以用它,是因为将用到数组公式。
写到这里就差不多了,最后要做的就是:使条件和结果对应起来。
根据刚才说的,只要遇到条件为 TRUE(按照条件的顺序) ,则结束判断。
所以我们要找到第一个满足条件的位置。
先给个例子:
{=MIN(IF({TRUE,FALSE,TRUE,TRUE,FALSE,FALSE,TRUE,FALSE,TRUE}+0={1,1,1,1,1,1,1,1,1},{1,2,3,4,5,6,7,8,9}))}
这里的{TRUE,FALSE,TRUE,TRUE,FALSE,FALSE,TRUE,FALSE,TRUE}即为条件,共有九个;
{1,1,1,1,1,1,1,1,1}相当于一个全是 TRUE 的数组(这是为了方便,完全可以用TRUE替换);
{1,2,3,4,5,6,7,8,9}是满足条件对应的操作(这里只是简单的数值)。
MIN()目的是为了找到第一个满足条件的位置。
这里有个问题,就是如果条件都为 FALSE 时,则 MIN() 返回0,
这是因为没有与全不满足条件对应的项,
如果再加个判断条件,就显得冗余了,
简单的办法是对单元个设置 自定义数字格式 , 对 0 位置设置格式即可。
比如:...;...;"数据未找到"

上面的例子是一个标准的IF()结构,如果想让条件为 FALSE 时,执行相应的操作,只要把{1,1,1,1,1,1,1,1,1}中的1换成0即可

TA的精华主题

TA的得分主题

发表于 2006-2-10 18:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-2-14 21:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 02:26 , Processed in 0.048885 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表