INDEX函数通过指定行号和列号,从表格区域中提取对应位置的数据,是Excel查找与引用领域的核心工具,尤其在与MATCH函数搭配后,能解决绝大多数VLOOKUP无法处理的逆向查找和多条件匹配问题。
INDEX函数怎么用?先掌握基础语法
INDEX函数有两种调用形式:数组形式与引用形式,数组形式用于返回单个值,引用形式可以返回单元格引用,多数情况下,我们使用数组形式。
数组形式语法
=INDEX(array, row_num, [column_num])
– array:要查找的单元格区域或数组常量。
– row_num:行位置,从1开始。
– column_num:列位置,可选,留空则返回整行。
引用形式语法
=INDEX(reference, row_num, [column_num], [area_num])
– reference:对一个或多个单元格区域的引用。
– area_num:选择引用中的第几个区域,可选。
参数必须准确,否则返回#REF!或#VALUE!错误。 row_num和column_num不能超过array的边界。
参数省略技巧
当array只有一行时,可以省略row_num;当只有一列时,可以省略column_num,INDEX(1:1,1,3)等价于=INDEX(1:1,3),这在处理单行数据时非常便捷。
数组形式与引用形式的选择
如果只需要返回一个值,使用数组形式更简单,如果需要对多个区域进行引用,或者需要返回单元格引用(如用于其他函数),则使用引用形式。=INDEX(Sheet1:Sheet3!A1:B5,2,3,2) 可从第二个工作表区域中提取数据,这在多表汇总中很有用。
INDEX函数和VLOOKUP区别:哪个更适合你的工作场景?
很多Excel用户一开始接触的是VLOOKUP,但一旦遇到逆向查找或插入列导致公式失效,就会转向INDEX+MATCH,这两者核心区别在于查找方向的灵活性和公式稳定性。
查找方向:VLOOKUP只能从左到右,INDEX+MATCH任意方向
VLOOKUP要求查找值位于查找区域的第一列,返回列必须在右侧,而INDEX+MATCH可以通过MATCH函数定位行列位置,无论查找值在左侧还是右侧,都能轻松提取,根据员工姓名查找编号,编号在姓名左侧,VLOOKUP无法直接实现,但INDEX+MATCH可以:=INDEX(A:A,MATCH(D2,B:B,0))。
插入列稳定性:VLOOKUP容易出错,INDEX+MATCH无影响
VLOOKUP的第三个参数是列序号,当在数据表中插入一列时,列序号不对应,结果出错,而INDEX+MATCH使用MATCH动态定位列号,插入列不影响公式结果。据统计,较多企业数据表格频繁变动,使用INDEX+MATCH能减少维护成本。
查找速度:INDEX+MATCH通常更快
VLOOKUP默认对整列进行查找,尤其在数据量大时效率较低,MATCH只查找匹配列,配合INDEX只提取指定位置,计算量更小,行业共识认为,在超过几千行的数据中,INDEX+MATCH的响应速度明显优于VLOOKUP。
多条件查找:VLOOKUP需要辅助列,INDEX+MATCH直接实现
VLOOKUP实现多条件查找通常需要添加辅助列拼接条件,而INDEX+MATCH可以通过数组公式直接匹配两个条件,=INDEX(C:C,MATCH(1,(A:A=”条件1″)(B:B=”条件2″),0)),这使得公式更联贯,易于维护。
对比表格
| 对比项 | INDEX+MATCH | VLOOKUP |
|——–|————-|———|
| 查找方向 | 任意方向 | 从左向右 |
| 插入列影响 | 无影响 | 插入列可能破坏公式 |
| 查找速度 | 较快(只搜索匹配列) | 较慢(全列搜索) |
| 多条件查找 | 支持数组公式 | 需辅助列 |
| 返回多列 | 灵活(改变MATCH列号) | 需修改列序号 |
| 数组支持 | 支持 | 不支持 |
| 公式维护 | 稍复杂但稳定 | 简单但脆弱 |
INDEX MATCH实例:黄金组合实战解析
逆向查找
场景:根据员工编号查找姓名,编号在B列,姓名在A列。
公式:=INDEX(A:A,MATCH(D2,B:B,0))
步骤:
1. 在D2输入要查找的编号。
2. 在E2输入公式,MATCH确定编号在B列的行号,INDEX从A列返回对应行。
多条件查找
场景:根据产品名称和销售月份查找销量,产品在A列,月份在B列,销量在C列。
公式:=INDEX(C:C,MATCH(1,(A:A=”产品X”)(B:B=”一月”),0))
注意:这是数组公式,需要按Ctrl+Shift+Enter结束(Excel 365支持动态数组则直接回车)。
二维查找
场景:利用INDEX函数二维查找交叉表,既有行标题又有列标题,根据产品名称和月份从B2:E10区域中提取销量。
公式:=INDEX(B2:E10,MATCH(“产品A”,A2:A10,0),MATCH(“一月”,B1:E1,0))
这里,两个MATCH分别定位行和列,INDEX返回交叉点。这是INDEX函数二维查找的经典应用,也是很多Excel课程中的必教案例。
返回整行引用
场景:需要计算某行所有数值的总和,但不知道具体列数,使用INDEX返回整行引用,再嵌套SUM。
公式:=SUM(INDEX(A1:C10,3,0))
这种方式比OFFSET更稳定,因为INDEX属于非易失性函数,不随工作表变化重复计算。
INDEX函数高级技巧:数组公式与动态范围
提取所有满足条件的记录
INDEX与SMALL、IF配合,可以提取所有符合条件的记录,从A列提取所有大于100的数值。
公式:=INDEX(A:A,SMALL(IF(A$1:A$100>100,ROW(A$1:A$100)),ROW(1:1)))
数组公式,向下拖动即可列出所有值。这是数据清洗中的常用手段,相当一部分数据分析师依赖此方法提取不重复值。
创建动态下拉列表
INDEX配合COUNTA可以创建动态范围供数据验证引用,定义名称”动态列表”:=INDEX(Sheet1!$A:$A,1):INDEX(Sheet1!$A:$A,COUNTA(Sheet1!$A:$A)),这样下拉列表会自动扩展。
INDEX与OFFSET效率对比
OFFSET是易失性函数,表格的任何变化都会导致其重新计算,INDEX为非易失性函数,仅在依赖单元格变化时重算,在大型工作表中,使用INDEX构建动态范围比OFFSET更高效。专业Excel开发人员通常优先选择INDEX而非OFFSET。
INDEX function函数常见问题解答
INDEX函数返回#REF!错误的原因是什么?
通常是因为row_num或column_num超过了数组的行数或列数,检查MATCH是否返回了有效数字,或者array区域是否包含错误值,如果使用了引用形式,area_num也需在reference范围内。
INDEX函数在数据量大时比VLOOKUP快吗?
是的,INDEX+MATCH只搜索匹配列,不扫描整个表格,计算量更小,在超过上万行的数据中,差异明显,但如果你使用的是Excel 365,XLOOKUP速度也很快,但INDEX+MATCH依然是一个稳定且兼容性好的选择。
INDEX函数可以返回多个值吗?
INDEX函数本身返回单个值,但通过数组公式与SMALL、ROW等函数组合,可以实现返回多个匹配结果,在Excel 365中,INDEX可以配合动态数组溢出,但本质上还是逐行返回,使用INDEX返回多个值的场景,通常出现在数据清洗和报表自动化中,你可以通过搜索INDEX函数免费教程获取更多案例与模板。
无论你是Excel新手还是进阶用户,掌握INDEX函数都能让你在数据处理时更加从容,从基础取值到数组组合,INDEX函数的价值远超你的想象。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/577711.html




