介绍一个INDEX+SMALL+IF+ROW的函数组合,能提取出满足某条件或某些条件的所有数据,可以一次性返回单行单列或多行多列的结果。
示例
组合函数
=INDEX(C$1:C$15,SMALL(IF(($C$3:$C$15=$C$18)*($D$3:$D$15=$E$18),ROW($C$3:$C$15)),ROW(A1)))
主要4个函数嵌套:
最外层为index函数,index(查询区域,第几行,第几列)返回我们定位的数据;
small(数组,参数),若参数等于1,则表示返回数组最小的数值;
if函数用来做判断,若所查询区域某值与查询条件相等,则通过row函数返回行号,否则flase。
下面分三个步骤介绍(以单条件查询为例):
1.获取所有符合查询条件的行号
2.将所有行号按从小到大排序
这里if函数里的row函数写法相对于第一步行的方向也固定下来了,因为这里将是数组形式,small函数的第二参数用row(A1),为了当下拉时,可以依次获取第一最小行数,第二最小行数等等。输入完公式,用shift+ctrl+enter表示为数组公式。
3.通过index函数获取查询值
这里要注意的是,查询区域是从第一行开始,因为row返回的是实际行数,index是根据所选查询区域第几行开始查找的。因为只固定了行号,找到符合查询条间的值后,同行其他列数据右拉即可,当然也可只需手动修改index的查询区域起到一样效果。
对于多条件则可写作:
=IF((条件区域1=条件)*(条件区域2=条件2),ROW(区域))