ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎么简化该超级大的IF函数?(再次上传最终效果附件)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-1-7 11:41 | 显示全部楼层
我把我公式的思路说一下,以便楼主和家里xdjm理解:=NDIRECT("班级课表!"&TEXT(MAX((T(OFFSET(班级课表!$B$3,1+(ROW($A$1:$A$12)-1)*15,(COLUMN($A$1:$B$1)-1)*7))=教师任课一览表!$BR$3)*((3+(ROW($A$1:$A$12)-1)*15)*1000+(2+(COLUMN($A$1:$B$1)-1)*7))),"R0C000"),)数组公式按三键
1、楼主24层IF嵌套公式的logical-test后半部是固定单元格:教师任课一览表!$BR$3,而前半部是班级课表!B4、I4、B19、I19、B34、I34……B154、I154、B169、I169纵向每隔15行,横向是隔开7列,很有规律。
2、为此,就用OFFSET构成一个二维“数组”(诸元素非数字):T(OFFSET(班级课表!$B$3,1+(ROW($A$1:$A$12)-1)*15,(COLUMN($A$1:$B$1)-1)*7)),其中1+(ROW($A$1:$A$12)-1)*15{1;16;31;46;61;76;91;106;121;136;151;166}(COLUMN($A$1:$B$1)-1)*7{0,7},这两组数分别组成以B3为参照点的OFFSET行偏移与列偏移,也即是上面的所列出的不连续单元格。
3、IF函数的value-if-true结果单元格是上述单元格的的上一行,即B3、I3、B18、I18、B33、I33、……,为了最后能通过INDIRECT用R1C1引用方式返回结果,公式构造另一个二维数组:相关行号乘1000加上列标序号:(3+(ROW($A$1:$A$12)-1)*15)*1000+(2+(COLUMN($A$1:$B$1)-1)*7)({3002,3009;18002,18009;33002,33009;48002,48009;63002,63009;78002,78009;93002,93009;108002,108009;123002,123009;138002,138009;153002,153009;168002,168009})(不熟悉R1C1引用的朋友可以从这个数组看到:千位数以上的3、18、33……正是所需单元格行号,而后三位2、9恰是B列、I列的列标序号)
4、这样一来,24层嵌套就变成:MAX((T(OFFSET(班级课表!$B$3,1+(ROW($A$1:$A$12)-1)*15,(COLUMN($A$1:$B$1)-1)*7))=教师任课一览表!$BR$3)*((3+(ROW($A$1:$A$12)-1)*15)*1000+(2+(COLUMN($A$1:$B$1)-1)*7))),前半部粉色部分与绿色部分相等判断结果是一个true与诸多false组成的数组,与后半部紫色部分相乘,得到唯一一个符合相等条件的四(五、六)位数及其他全是0的数组,通过MAX就把这个数提出来。
5、最后,INDIRECT("班级课表!"&TEXT(MAX(……),"R0C000"),),把结果单元格里内容返回出来。

[ 本帖最后由 wangjguo44 于 2011-1-7 11:55 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-1-7 11:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-1-7 14:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 xiangjm123 于 2011-1-6 18:59 发表
如下:
     =IF(班级课表!B4=教师任课一览表!$BR$3,班级课表!B3,(IF(班级课表!I4=教师任课一览表!$BR$3,班级课表!I3,IF(班级课表!B19=教师任课一览表!$BR$3,班级课表!B18,IF(班级课表!I19=教师任课一览表!$BR$3,班 ...

制作课程表可参见帖子:
教育应用贴:(有成绩统计、分班、考场混排、课表编排等研究过程和结论)20110106更新 http://club.excelhome.net/thread-589978-1-1.html

TA的精华主题

TA的得分主题

发表于 2011-1-7 15:53 | 显示全部楼层
哈哈哈>>>>想当初俺们嵌完了64层还不够用.

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-7 18:22 | 显示全部楼层

回复 19楼 岭南人家 的帖子

VIB密码是:1272418015

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-7 18:27 | 显示全部楼层

回复 21楼 wangjguo44 的帖子

谢谢你的非常专业的解答!我认真学习学习。不过,如果是用数组公式的话,特别是多了,工作表可能运行会很慢!那种等待,是难以忍受的。
你的公式时非常正确的,但是,它只是课表中一个单元格的引用。不能够拖拽满整个课表。若果要一个一个地输入,那也是很麻烦的。

[ 本帖最后由 xiangjm123 于 2011-1-7 18:36 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-1-7 18:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
公式是能够根据实际情况修改成可以拖拉的,不过数组公式在数量大的状况下,的确运行很慢。建议看看下面这个贴,是否有可以借鉴的地方:
http://club.excelhome.net/thread-589978-1-2.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-7 19:01 | 显示全部楼层

回复 27楼 wangjguo44 的帖子

再次谢谢你的大力支持。再次学习!

TA的精华主题

TA的得分主题

发表于 2011-1-7 22:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-1-7 22:46 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 08:33 , Processed in 0.031697 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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