Excel一对多查询的思路和方法汇总


=COUNTIFS($B$2:B2,$F$1)
然后输入以下公式:
=IFERROR(VLOOKUP(ROW(A1),A:C,3,0),””)
它的好处在于,用辅助列可以判断B2:B8中每个单元格是否等于“古龙班”,如果是的,则进一步返回它是第几次出现的,后面就返回符合条件的第1个,第2个….



=IFERROR(VLOOKUP(ROW(A1),IF({1,0},COUNTIF(OFFSET($B$2,,,ROW($1:$7)),$F$1),$C$2:$C$8),2,0),””)
它的原理就在于先用OFFSET($B$2,,,ROW($1:$7)),$F$1)创建7个动态的范围,类似于上面的辅助列,它是以单元格B2为基准,向下,向右偏移都是0,但是高度是动态的,如果是“1”,则表示范围是B2:B2,如果高度是“2”,则表示B2:B3,以此类推,然后再嵌套countif函数进行计数,后面再嵌套if{1,0},人类创建一个二维的数组,最后用Vlookup函数进行查找。
方法4:Index+small+If+Row组合法
完整的公式:
=INDEX(C:C,SMALL(IF($B$1:$B$8=$F$1,ROW($1:$8),4^8),ROW(1:1)))&””
先用If函数将B1:B8中的数值依次同查找条件进行比较,如果相同,返回1-8中的一个(第1个返回1,第2个返回2…), 如果不同则返回一个很大的值 ,然后嵌套small+row函数,第一行返回符合条件中第1个最小的,第二行返回第2个最小的,以此类推,然后再嵌套index函数即可得到结果。

方法5:Indirect方法
=VLOOKUP($F$1,INDIRECT(“B”&SMALL(IF($B$1:$B$8=$F$1,ROW($1:$8),4^8),ROW(1:1))&”:$C$8″),2,0)
原理同方法4,主体依然是small+if+row,假如该做公式组合的第1个结果是“6” (即符合条件的是数据范围中的第6行) 然后嵌套indirect函数创建一个数据范围,即“B”列第6行,至单元格C8,即B6:C8,然后在些范围内查找“古龙班”,返回第2行。
方法6:Vlookup+Offset方法
=IFERROR(VLOOKUP($F$1,OFFSET($B$1:$C$1,SMALL(IF($B$1:$B$8=$F$1,ROW($1:$8)-1,2^8),ROW(A1)),,8),2,0),””)
这里面就是利用offset函数创建一个动态的查找范围, 主体依然是small+if+row, 假如该组合公式的第1个结果是6,则以单元格区域B1:C1为基准,向下偏移6个单元格,向右不偏移,高度固定为8,即单元格区域B6:C13,在些范围内用VLOOKUP进行查找,同理,下一个查找范围为B7:C14,再下一个范围为B8:C15,VLOOKUP每次只能返回范围内的第1个值 ,但由于我们的查找范围是动态的,所以每次都能返回不同的值直到所有符合条件的值都返查找出来。

夜雨聆风