#EXCEL# #INDEX函数# #查询#
使用环境:WIN10 HOME版,WPS 2019
EXCEL表格中查询是用得比较多的,尤其面对符合条件的记录是多条或者不确定数量的时候,INDEX函数是最适合的。
其函数原型为:INDEX(array, row_num, [column_num]),第一个参数为筛选数据的目标区(或者叫数据源区域),第二个参数为行号,第三个参数为列号。这里要注意行号、列号是第一个参数里面的相对行号或者列号,不一定是表格中绝对行号、绝对列号。
特殊应用有单行或者单列里面筛选数据记录。
一、用SMALL结合IF进行符合多条记录查询的经典应用
一对多查询
具体使用公式为:{=IFERROR(INDEX($A$2:$B$10,SMALL(if(EXACT($A$2:$A$10,$G$1),row($A$2:$A$10)-1,4^100),row($a1)),MATCH(d$1,$A$1:$B$1,0)),"END")},这里要别忘了公式输入完,要用CTRL+SHIFT+ENTER键,给公式带上{}号,即数组公式。
第一个参数就是筛选数据的目标区域为$A$2:$B$10,注意这里是去掉了表头的。所以后面用ROW()函数获取绝对行号后要减去表头。
第二个参数是行号,是一个small获取的符合条件的行号数组,符合条件的行我们返回它真实的行号,不符合条件的行,我们设定一个大于第一个数据区域的最大行号数即可,通常我们设定一个比较大的数,比如我习惯用4^100,不管数据区域多大我们不用考虑它了。
SMALL函数的第二个参数就是取第一小、第二小。。。。。,所以用ROW($A1)来获取递增数。
第三个参数获取列号就比较简单。
用IFERROR函数来显示不符合条件的记录,即”END“。
二、用于剔除重复值筛选
具体使用公式为:=IFERROR(INDEX($A$2:$a$10,SMALL(if(exact(match($A$2:$A$10,$A$2:$A$10,0),row($A$2:$A$10)-1),row($A$2:$A$10)-1,11),row($a1))),"END")
这里我们用MATCH函数进行剔除重复数值。有多个重复值,match返回的行号是第一条记录,因此公式中我们只记录第一条记录的行号。不是第一条记录,match($A$2:$A$10,$A$2:$A$10,0)获取的行号与row($A$2:$A$10)-1获取的行号是不相等的。
如果我们公式中的目标区域超过了实际数据区,要进行空值行判断,比如if((isblank($A$2:$A$10000)=false)*exact(match($A$2:$A$10000,$A$2:$A$10000,0),row($A$2:$A$10000)-1),row($A$2:$A$10000)-1,4^100),否则,第一条空行也会被返回。
实际应用中,我们筛选条件可能比较复杂,直接在IF条件判断里面增加即可。其次根据应用场景不同,不仅可以用SMALL,我们还可以用LARGE函数,那么不符合记录的行号值我们要从小设定。
大家还用INDEX函数做了哪些更有意义的应用呢?欢迎评论区分享。