Excel常用查找函数

1. vlookup
vlookup的4个参数如下:

=VLOOKUP (【要查找的项】、【要查找位置】、【包含要返回的值的单元格区域中的列号】、【返回近似或精确匹配 - 指示为 1/TRUE 或 0/FALSE】) 

例1:
武将表包含很多武将的详细数据,

但是我们只要如下武将的所属,

详细步骤,
(1)在B2输入公式,第一个参数选择A2,即要查找“项籍”;

(2)第二个参数,在详表里找到姓名和所属;我们是要根据 “姓名” 查找 “所属” ,所有选择B1,按住shift,再点击E列的最后一行。
ps1:vlookup里,索引值列需要在查找值列的左边,这里就是说“姓名” 列必须在 “所属”列的左侧;
ps2:在不同的工作簿里,需要明确查找范围;如果在同一个工作簿里,选择整列;这个很关键;

这个步骤,实际把选择的数据都存到数组里,函数直接在数组里返回值。


(3)第三个参数,从左往右数,“姓名”右边第4列是“所属”,所以我们填4;

选择区域的时候有提示,列数多的时候看这里很方便;

(4)第四个参数,一般采用精确匹配(false或0);
近似匹配True,未查到对应值的时候返回小于查找值的最大值;
精确匹配False,未查到对应值的时候返回错误值 #N/A;


确认后返回值,再填充一下,“所属”就全部查到了。

(5)结合数组的公式
选中6列,输入公式;

第三个参数改成数组{8,3,4,5,6,7},对应前面选择6列;就是C列往后数8、D列往后数3。。。依次类推;
数组公式最后不是回车,而是ctrl+shift+enter;这样公式外面就自动有一对{}!
一次搞定了6列,好爽!!


(6)vlookup的局限

  • 【查找列】必须在【索引列】的右侧;365的xlookup()似乎改进了,暂时没使用过;
  • 只能实现一对一的查询。而一对多、多对一甚至多对多都无法实现;也就是说【索引列】里的值必须唯一,否则结果不准确,总是返回第一个满足条件的值;

(7)常见问题
参考官方文档,常见问题、最佳用法部分
https://support.microsoft/zh-cn/office/vlookup-%E5%87%BD%E6%95%B0-0bbc8083-26fe-4963-8ab8-93a18ad188a1

(8)类似的
lookup、hlookup,用法比较类似,略过。

2. Index+match
vlookup()很好用,但是【查找列】必须在【索引列】的右侧;每次做查找的时候要把源表做调整,【索引列】复制粘帖到左侧,麻烦而且动了源表;难受啊~

用 Index+match就不存在这个问题了。
例2:
我们需要在《宝物表》查找这三个数据,

《宝物表》如下,我们可以看到这三个信息都在“姓名”列的左侧;vlookup需要把E列武将数据复制到最左侧,如果表格数据大的话很麻烦。

match函数可以找到武将所在行数,试一下:
以吕布为例,

=MATCH(A8,'[源数据采集-20200824.xlsx]宝物2'!$E$1:$E$44,0)

A8  就是吕布所在单元格;
'[源数据采集-20200824.xlsx]宝物2'!$E$1:$E$44,指定查找范围;
0, 表示精确匹配。
结果返回2,即宝物表的E列,吕布所在行为2.


外面嵌套index函数:

index( 【包含武将名、宝物名数据范围】,【行数】,【列数】)
=INDEX('[源数据采集-20200824.xlsx]宝物2'!$B$1:$E$44,       MATCH(A2,'[源数据采集-20200824.xlsx]宝物2'!$E$1:$E$44,0),      1)

【包含武将名、宝物名数据范围】,选择如下区域

行数,为match函数返回值。

宝物所在列数,在所选范围的第1列;
确定后返回,乌骓,
填充后如下:

3. offset+match
offset 函数
项籍的特技所在单元格,在 项籍所在单元格的右侧第2列,第0行(即同行);

试一下,
=OFFSET(A2,0,2),结果果然返回霸王。

因此,只要在宝物表找到武将所在行,再往左侧偏移2格即可。

=OFFSET('[源数据采集-20200824.xlsx]宝物2'!$E$1,
                     MATCH(A2,'[源数据采集-20200824.xlsx]宝物2'!$E$1:$E$44,0)-1,
                        -2)


offset并不能支持数组公式。

index则支持数组公式。

更多推荐

Excel常用查找函数,vlookup、match+index/offset