署名作者: gouweicao78 版权声明: 版权所有 非作者本人严禁转载 适用版本: 2010 2007 2003以前版本 语言环境: 简体中文 通过对 《Vlookup和Lookup函数一一过招》(请百度搜该文)的学习,大家对单一结果的查询有了掌握。那么对满足条件的多个结果,怎样在表中一行行地列出来呢?除了添加辅助列用LOOKUP或VLOOKUP、INDEX+MATCH等办法查询外,最常用的就是数组公式了。下面就有关解题思路进行解释:
必杀技:=INDEX(结果列,SMALL(IF(条件,ROW满足条件的行号,较大的空行行号),ROW(1:1)))&""
【原理】1、数组运算;2、空单元格与空文本合并。 【特点】得到的结果是文本。 【实例】如图:筛选张三的领用记录(条件是E1单元格的“张三”)。
- =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行,而在这一行中,一般不会有人输入数据,是空单元格。因此,利用空单元格与空文本合并返回空文本的特性,将超出结果数量的部分不显示出来。 请参考:《在Excel中究竟何为“空”?》(请百度搜该文)
TuXcBPVk.rar
(13.47 KB, 下载次数: 156)
|