Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3759|回复: 15

[已解决]如何在small里面排出非空的符合要求项

[复制链接]
发表于 2013-2-24 19:54 | 显示全部楼层 |阅读模式

在small里面,想用if语句,弄出非空的符合要求的数组,这是最主要的问题。如果可以,顺便教我依次显示出来
比如根据 "科室"  ,“标本类型”,还有结果非空,查询出符合要求的项目的方法。

01.png


02.png


最佳答案
2013-2-25 19:37
(, 下载次数: 5)
发表于 2013-2-24 20:07 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-2-24 20:59 | 显示全部楼层
本帖最后由 shenhuxiad 于 2013-2-24 21:00 编辑
hwc2ycy 发表于 2013-2-24 20:07
上附件。

原先是使用辅助列来完成的,这种方法非常不方便,增加一个数据,就需要在后面报告单里面修改了
“菌落数”那栏就是结果了,以数字个数表示

如何自动匹配.rar

41.63 KB, 下载次数: 5

回复

使用道具 举报

发表于 2013-2-24 21:06 | 显示全部楼层
你把你的要求说明白点,压根看不明白你要解决什么问题。
回复

使用道具 举报

 楼主| 发表于 2013-2-24 22:08 | 显示全部楼层
hwc2ycy 发表于 2013-2-24 21:06
你把你的要求说明白点,压根看不明白你要解决什么问题。

麻烦您了!

说明1.png


说明2.png


说明3.png


重新上传简洁版.rar (28.94 KB, 下载次数: 10)
回复

使用道具 举报

发表于 2013-2-24 22:22 | 显示全部楼层
QQ截图20130224222037.jpg
你这值是空的嘛。
回复

使用道具 举报

发表于 2013-2-24 22:23 | 显示全部楼层
还有就是项目也也分了不少,都要单独列出?
回复

使用道具 举报

 楼主| 发表于 2013-2-24 23:52 | 显示全部楼层
hwc2ycy 发表于 2013-2-24 22:23
还有就是项目也也分了不少,都要单独列出?

嗯,是的,不过主要就5大项目,只要做一个两条件匹配外加结果非空的栗子就行了,前面有求助过,说是利用 index 和small函数实现,目前不会的是:如何写语言,判断出结果非空的数据项,进行匹配。请用我后来上传的那个附件,O(∩_∩)O谢谢!
=INDEX(B:B,SMALL(IF(A$2:A$8=E$1,ROW(A$2:A$8),4^8),ROW(1:1)))&"" 这个语句是基本的构思,但是如何弄成三个条件?
回复

使用道具 举报

 楼主| 发表于 2013-2-25 00:00 | 显示全部楼层
本帖最后由 shenhuxiad 于 2013-2-25 00:01 编辑
hwc2ycy 发表于 2013-2-24 22:23
还有就是项目也也分了不少,都要单独列出?

核心构思是这个:帮我加上多条件的if判断句就行,判断 科室、项目、菌落数 非空三个坑 O(∩_∩)O~。这个是网上另一个excel高手些的inde+ small大杀器
excel中INDEX+SMALL函数联合使用提取多行数据
=INDEX(结果列,SMALL(IF(条件,ROW满足条件的行号,较大的空行行号),ROW(1:1)))&""
【注意】 输入完公式一定要ctrl+shift+enter
【原理】1、数组运算;
        2、空单元格与空文本合并。
【特点】得到的结果是文本。
【实例】如图:筛选张三的领用记录(条件是E1单元格的“张三”)。
1.
=INDEX(B:B,SMALL(IF(A$2:A$8=E$1,ROW(A$2:A$8),4^8),ROW(1:1)))&""
复制公式或代码
【解析】:对照“必杀技”,多数人已可以瞧出一点端倪来。
1、条件模块:IF(A$2:A$8=E$1,ROW(A$2:A$8),4^8)
表示如果A2:A8的姓名等于E1的“张三”,则返回A2:A8的行号,否则返回4^8,即65536。
IF(如果,则,否则——这语言不难读吧
条件模块经过数组运算,因为A2、A5、A8满足条件,所以返回的是行号数组{2;65536;65536;5;65536;65536;8}。
2、排序模块:SMALL(IF,ROW(1:1))
公式的第1行,ROW(1:1)返回{1},在第2行返回{2}……因此,利用SMALL+ROW可以将条件模块返回的行号数组从小到大依次排序得出。当然,此例中SMALL({2;65536;65536;5;65536;65536;8},1)得到的是2,第2小的是5,第3小的是8,第4小及以后都是65536。
3、引用模块:INDEX(引用列,SMALL得到的行号)
=INDEX(B:B,2)——引用B2,=INDEX(B:B,65536)——引用B65536
4、容错模块:&""
当公式到了第4行,3个满足条件的记录都已经找出来,此时公式是=INDEX(B:B,65536)&“”
因为Excel2003的最大行数是65536行,而在这一行中,一般不会有人输入数据,是空单元格。因此,利用空单元格与空文本合并返回空文本的特性,将超出结果数量的部分不显示出来。

5.我们也可以加个IF函数使用,效果一样
=if(INDEX(B:B,SMALL(IF(A$2:A$8=E$1,ROW(A$2:A$8),4^8),ROW(1:1)))=0,"",INDEX(B:B,SMALL(IF(A$2:A$8=E$1,ROW(A$2:A$8),4^8),ROW(1:1))))
6.如果不想成为文本则去掉&"",或者不要用IF函数.

回复

使用道具 举报

发表于 2013-2-25 00:38 来自手机 | 显示全部楼层
楼主如果有基础,建议一点点的求助,只要每次能解决一个小问题就好。


回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-18 21:24 , Processed in 0.314168 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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