Excel精英培训网

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

[分享] INDEX+SMALL函数用法

  [复制链接]
发表于 2011-3-10 23:34 | 显示全部楼层 |阅读模式
先说明这不是我的原创,是别人的贴子,觉得有用也就保存了下来,先发一部分吧,有用再接着发上来)


=INDEX(结果列,SMALL(IF(条件,ROW满足条件的行号,较大的空行行号),ROW(1:1)))&""

【原理】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行,而在这一行中,一般不会有人输入数据,是空单元格。因此,利用空单元格与空文本合并返回空文本的特性,将超出结果数量的部分不显示出来。

评分

参与人数 4 +15 收起 理由
芥末花儿 + 1 来学习
locsasi + 1 赞一个
apple_wong + 1 很给力!
ls + 12 赞一个!

查看全部评分

发表于 2011-7-5 17:44 | 显示全部楼层
回复

使用道具 举报

发表于 2011-7-16 20:47 | 显示全部楼层
回复

使用道具 举报

发表于 2011-7-16 19:54 | 显示全部楼层
要好好学习
回复

使用道具 举报

发表于 2011-7-15 23:33 | 显示全部楼层
不错,先保存一下
回复

使用道具 举报

发表于 2011-7-15 23:45 | 显示全部楼层
路过学习  
回复

使用道具 举报

发表于 2011-7-15 23:13 | 显示全部楼层
学习了哦。
回复

使用道具 举报

发表于 2011-7-15 15:52 | 显示全部楼层
回复

使用道具 举报

发表于 2011-7-15 14:42 | 显示全部楼层
路过学习。。。
回复

使用道具 举报

发表于 2011-7-14 19:27 | 显示全部楼层
很清晰的解说,相信对初学数组的人有很大帮助。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 06:23 , Processed in 0.456937 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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