惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
IT之家
IT之家
Google DeepMind News
Google DeepMind News
罗磊的独立博客
爱范儿
爱范儿
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
U
Unit 42
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
B
Blog
博客园 - 叶小钗
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - 月异星邪

Anaconda官方网站下载慢的解决方法 定时任务调度自动提醒企业微信 天高云淡 leobbs皮肤 - 月异星邪 - 博客园 仿QQ信息弹出 - 月异星邪 - 博客园 http://www.xywq.com/files/ganzhi11.htm IIS6 Http压缩配置方法 - 月异星邪 - 博客园 IIS6,SESSION超时时间过短的解决(未测试) 常用asp.net代码 - 月异星邪 - 博客园 在ASP.NET中使用Session常见问题集锦 ASP.NET 2.0:使用用户控件和定制的Web部件个人化你的门户网站 ASP.NET中常用的文件上传下载方法 Infragistics中WebGrid的MultiColumn Headers设计 轻松实现UltraWebGrid中的分页控制 http://www.bo-blog.com/index.php?l=zh_tw&mod=skins ASP.NET中常用的文件上传下载方法 ASP.NET 2.0中使用webpart系列控件 ASP.NET2.0 WebPart实例教程 数字转换为大写人民币(附源码) 用ASP.NET 2.0实现AJAX风格的Web开发
如何实现函数IF的嵌套超过七层?
月异星邪 · 2007-05-28 · via 博客园 - 月异星邪

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即可

IF(条件,真,假)&IF(条件,真,假)&
IF(条件,真,假)&..............
其中假为空,即输入""(两个双引号)

=(I3/D3>=73.08)*7+(AND(I3/D3<73.08,I3/D3>=69.03))*6.5+(AND(I3/D3<69.03,I3/D3>=64.5))*6

一个单元格实现
=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(A
1=22,"V",IF(A1=23,"W",IF(A1=24,"X",""))))))))&IF(A1=25,"Y",IF(A1=26,"Z",""))(数组形式输入)。

将七层之外的IF语句,放在另外的单元格内来处理,例:C5=if(if,...,(if...),B5))),B5单元格就是存放七层之外的IF语句。依此类推,可以实现在数据库语言中CASE语句的功能。

当然,对于初学者会有一些困难。

这里给出一个解决IF函数嵌套超出范围的方法,可能比较容易使初学者看懂。其思路是:一个单元格做不了的事,分给两个或更多的单元格来做,文字内容是这样,函数内容也是这样。

例子:假如 A1=1,则 B1=A;A1=2,则 B1=B …… A1=26,则 B1=Z

解决方法如下:
B1 = 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",C1))))))))
C1 = 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",D1))))))))
D1 = 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",E1))))))))
E1 = IF(A1=25,"Y",IF(A1=26,"Z","超出范围"))

根据情况,可以将 C、D、E 这些从事辅助运算的单元格放在其它任何地方,或

一个单元格也可以实现!
=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",""))