乐于分享
好东西不私藏

ExcelMATCH与INDEX组合:查找之王VLOOKUP的替代方案

ExcelMATCH与INDEX组合:查找之王VLOOKUP的替代方案

为什么你需要学习INDEX+MATCH

用了十年Excel,我见过太多人死磕VLOOKUP。遇到向左查找就抓瞎,数据量大时表格卡得像蜗牛,还不知道问题出在哪。

INDEX+MATCH这个组合,老手都在用,新手却很少碰。原因很简单:看起来比VLOOKUP复杂。但说实话,学会之后你会发现,它反而更直观,也更灵活。

今天这篇文章,就把这个组合彻底讲清楚。

---

先搞懂两个函数各自干什么

MATCH函数:找位置

MATCH的作用很简单——告诉你某个值在区域里排第几个。

语法:=MATCH(查找值, 查找区域, 匹配方式)
参数说明:
  1. 查找值:你要找的内容
  2. 查找区域:去哪里找(只能是单行或单列)
  3. 匹配方式:0表示精确匹配,1表示小于等于,-1表示大于等于
    实际例子:

假设A列是员工姓名,你要找"张三"在第几行:

=MATCH("张三", A:A, 0)

返回结果是行号,比如5。注意这是相对于查找区域的位置,不是工作表的绝对行号。

快捷操作:
    • 点击要放结果的单元格
    • 输入 
    • =MATCH(
    • 点击"张三"所在单元格,或直接输入 
    • "张三"
    • 输入逗号,选中A列
    • 输入 ,0)
     回车  常见错误:
    1. 忘记写第三个参数0,默认变成模糊匹配,结果可能错
    2. 查找区域选了多列,报错——MATCH只能查单行或单列
      ---

    INDEX函数:按位置取值

    INDEX的作用相反——告诉你某个位置上的值是什么。

    语法:
    =INDEX(区域, 行号, 列号)
    参数说明:
    1. 区域:你的数据范围
    2. 行号:取第几行的值
    3. 列号:取第几列的值(可省略,单列时不需要)
    实际例子:

    A列是姓名,B列是部门。你要取第5行的姓名:

    =INDEX(A:A, 5)

    要取第5行的部门:

    =INDEX(B:B, 5)

    快捷操作:
      • 点击目标单元格
      • 输入 
      • =INDEX(
      • 选中A列
      • 输入逗号,再输入行号(或点击存放行号的单元格)
      • 输入 )
      •  回车  

      ---

      两个函数组合起来

      现在把两个函数连起来用,威力就出来了。

      核心逻辑:

      MATCH找到位置 → INDEX按位置取值

      经典组合公式:
      =INDEX(结果列, MATCH(查找值, 查找列, 0))

      实战案例:根据员工姓名查部门

      假设数据如下:

      1. A列:员工姓名
      2. B列:部门
      3. C列:入职日期
        你要根据姓名查部门,在E2单元格输入姓名"张三",F2放结果。
      公式:
      =INDEX(B:B, MATCH(E2, A:A, 0))
      拆解理解:
      • MATCH(E2, A:A, 0)
      •  → 找到"张三"在A列排第几,假设返回5 
      • INDEX(B:B, 5)
      •  → 取B列第5行的值,就是部门名称  
      操作步骤:
        • 在F2单元格输入 
        • =INDEX(
        • 点击B列标题,选中整列
        • 输入逗号,然后输入 
        • MATCH(
        • 点击E2单元格
        • 输入逗号,点击A列标题
        • 输入 ,0))
        •  回车  

        ---

        INDEX+MATCH比VLOOKUP强在哪

        第一:可以向左查找

        VLOOKUP有个致命限制:查找值必须在查找范围的第一列。这意味着你没法向左查。

        举个例子:

        1. B列是部门
        2. C列是姓名
        3. 你要根据姓名查部门

        VLOOKUP做不到,因为姓名在部门右边。

        INDEX+MATCH完全不受限制:

        =INDEX(B:B, MATCH("张三", C:C, 0))

        查找列和结果列谁左谁右,根本无所谓。

        第二:插入删除列不会报错

        VLOOKUP的第三个参数是列号数字,比如查第三列就写3。问题来了:你在中间插了一列,原来的第三列变成第四列,公式就错了。

        INDEX+MATCH引用的是整列,插入删除列不影响公式,自动适应。

        第三:计算速度更快

        数据量小的时候感觉不到,几万行数据时差距明显。VLOOKUP每次都要扫描整个查找范围,INDEX+MATCH的MATCH只找一次定位,INDEX直接取值,效率高很多。

        第四:支持复杂查找

        MATCH的第三个参数不只是精确匹配,还能做区间查找。配合排序好的数据,可以找小于等于某值的最大值,或大于等于某值的最小值。这个用法在阶梯计费、成绩等级划分时特别实用。

        ---

        进阶用法:双向查找

        INDEX+MATCH还能做VLOOKUP完全做不到的事:同时按行和列查找。

        案例:查找某员工某月的销售额

        数据结构:

        1. A列是员工姓名(从A2开始)
        2. 第一行是月份(从B1开始)
        3. 中间是销售额数据
        4. 你要查"李四"在"3月"的销售额。
        公式:

        =INDEX(B2:M10, MATCH("李四", A2:A10, 0), MATCH("3月", B1:M1, 0))

        拆解:
        1. 第一个MATCH找"李四"在第几行
        2. 第二个MATCH找"3月"在第几列
        3. INDEX按行号列号定位单元格

        这个技巧做交叉表查询非常实用。

        ---

        常见问题和注意事项

        1. 返回#N/A错误

        原因通常是找不到匹配值。检查以下几点:

        1. 查找值和查找列的数据类型是否一致(文本和数字是两回事)
        2. 是否有多余空格,用TRIM函数清理
        3. 查找区域是否选对了

        2. 返回#REF!错误

        说明行号或列号超出范围。检查MATCH返回的值是否合理,可能是查找区域选错了。

        3. 下拉公式时引用出错

        记住用绝对引用或整列引用。比如 

        $A:$A 或 $A$2:$A$100,不然下拉时区域会偏移。

        4. 数据量大时仍然慢

        虽然比VLOOKUP快,但几万行数据配合复杂公式还是会卡。考虑用辅助列简化公式,或者换Power Query处理。

        5. 多条件查找怎么办

        可以用数组公式:

        =INDEX(C:C, MATCH(1, (A:A=E2)*(B:B=F2), 0))

        这个公式同时匹配A列等于E2、B列等于F2两个条件。输入后按Ctrl+Shift+Enter确认(Excel 2019及以后版本直接回车即可)。

        ---

        实操练习建议

        找一份你工作中的实际数据,试着把现有的VLOOKUP公式改成INDEX+MATCH。

        具体步骤:

        1. 打开一个用VLOOKUP的表格
        2. 找到VLOOKUP公式所在单元格
        3. 分析原来的查找列和结果列
        4. 用INDEX+MATCH重写公式
        5. 对比结果是否一致

        改几个公式下来,基本就熟练了。

        ---

        写在最后

        INDEX+MATCH不是什么高深技巧,就是两个简单函数的组合。花半小时学会,以后遇到VLOOKUP搞不定的情况,不用再绕弯路。

        一句话总结:INDEX+MATCH能做的事VLOOKUP不一定能做,VLOOKUP能做的事INDEX+MATCH都能做,而且更快更稳。

        ---

        相关学习资料