如何用Excel进行顺序查询与匹配?

如标题……算了这标题啥都没说清楚。

这么说吧,我希望搞个函数,让它能够读取一个单元格的数据,然后在另一个列、或者工作簿、再或者最好是工作表文件的指定列(比如C列)中顺序查询到与其相等的单元格,读取对应的第二列(比如命中C8,然后读取B8),并返回最终读取到的数值,或者在没有命中时显示错误。

我设想的整个流程差不多是这样的:
例如我在单元格A3计算这个函数→读取单元格B3的值→顺序查询E1、不命中、查询E2、不命中、……查询E5、命中→读取F5的值→返回F5的值到A3,结束。

所以Excel有可能做到这样的事情吗?

如果您希望使用函数而不是VBA来执行此操作,可以使用Excel中的INDEXMATCH函数组合来实现。

假设您要在工作表"Sheet1"中查找列C中与给定单元格A2的值相等的单元格,并返回对应列B中的值。您可以在B2单元格中输入以下函数:

=INDEX(Sheet1!B:B,MATCH(A2,Sheet1!C:C,0))

这个函数的作用是:

  • MATCH(A2,Sheet1!C:C,0):在"Sheet1"工作表的列C中查找与A2单元格的值相等的单元格的行号。
  • INDEX(Sheet1!B:B, match_row):使用找到的行号match_row,从"Sheet1"工作表的列B中返回对应的值。
1 个赞

这难道不是vlookup函数的功能描述吗?

1 个赞

INDEX和MATCH比VLOOKUP舒服很多,不用数第几列,也不用管查询列在右边还是左边。

1 个赞

具体函数自己写吧,顺序查询这个功能我也经常用的,我是这么写的:
第1步 if+row(),if判断是否符合条件(并不只是找数,通配符找文本也能实现),符合则为row(),否则为空
第2步 small+row(),在另一个表里做查询表,比如在第六行开始查数据就是row()-5(相当于第1个最小值,下一行的row()-5就相当于第2个最小值),这样通过small在每一行中取到了其对应的第n小的在第1步取到的值
第3步 VLOOKUP或者match+index组合取数,用第2步small取数就行了
最终的效果是输入一个数,能得到全部的按顺序排列的该数对应的数据行(ps.高版本的offce365中已经自带该功能)

1 个赞

对的,但是vlookup怕有重复。

1 个赞

不太明白,INDEX&MATCH不是也怕重复吗?

对的,也怕重复。

excel出了filter函数,可以筛选出所有符合条件的重复值

题主的说法来看也没提要所有命中结果吧
——
而且主要是这个需求太基本了……

如果需要顺序,就有点麻烦了。