INDEX函数与MATCH函数嵌套使用技巧

本文介绍了Excel中INDEX函数与MATCH函数嵌套使用的技巧,通过实例解析了它们如何实现类似VLOOKUP和LOOKUP的功能,但更加灵活。文章还展示了如何利用这两个函数解决复杂问题,如根据C列的频次生成新的序列,并给出了完整的公式解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.officezhushou.com/excelhansu/5464.html

首先呢,INDEX函数+MATCH函数嵌套的最基本格式如下:

index(序列1,match(值,序列2,0))

其含义为:

根据“值”在序列2中的位置,得出序列1中相同位置的值(模糊查找时,最后参数也可能是1、-1)。

这个看似和vlookup函数很像,但它不需要源数据的严格对齐,也不需要查找值必须在首列,更为灵活一些~

实例如下:
INDEX函数与MATCH函数嵌套使用技巧
这样的反向查找,其实用VLOOKUP、LOOKUP、INDEX+MATCH都是可以做到的,3个公式分别如下:

VLOOKUP法:

=VLOOKUP(E3,IF({1,0},$C$2:$C$9,$B$2:$B$9),2,FALSE)

LOOKUP法:

=LOOKUP(1,0/($C$2:$C$9=E3),$B$2:$B$9)

INDEX+MATCH法:

=INDEX($B$2:$B$9,MATCH(E3,$C$2:$C$9,0))

这个基本实例中,序列1就是B2:B9,序列2是C2:C9,查找值是E3。以上,可见3者异同。

除了以上的基本情景,INDEX+MATCH嵌套也可能会用在其他的怪异需求中。

比如下面的例子:

要将B列内容各自重复C列指定的次数,形成一个新的序列。
INDEX函数与MATCH函数嵌套使用技巧
首先,我们想到用INDEX来提取B列内容:

=INDEX($B$14:$B$17,X)

只是,这个X应该是什么呢?

它得是一个在下拉的时候,前6个取值是1,然后2个2,然后5个3,然后3个4,这样的序列。

我们自然想到,先将频次序列{6,2,5,3}变成累计序列{6,8,13,16},然后从0开始对它进行模糊查找,如下:

=MATCH(ROW(A1)-1,{6,8,13,16},1)

(下拉)

这时,得到了这样一个序列:

{#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,1,1,2,2,2,2,2,3,3,3}

这个序列,离我们想要的序列还有两点不同:1都变成了错误值,后面的取值也都少了1;据此可以在后面+1,前面增加IFERROR:

=IFERROR(MATCH(ROW(A1)-1,{6,8,13,16},1)+1,1)

(下拉)

此时,成功获得了想要的序列X,那么将它替换回原公式,即:

=INDEX($B$14:$B$17,IFERROR(MATCH(ROW(A1)-1,{6,8,13,16},1)+1,1) )

(下拉)

如此,目的实现。

最后,还有一个问题,即公式中的累计序列如何计算得到?

这可以用offset选定区域并求和获得:

=SUBTOTAL(9,OFFSET($C$14,,,ROW($1:$4),1))

(此为数组公式)

即将C14分别向下1、2、3、4格的区域求和。

用以上公式替代掉{6,8,13,16},则最终的公式为:

=INDEX($B$14:$B$17,IFERROR(MATCH(ROW(A1)-1,SUBTOTAL(9,OFFSET($C$14,,,ROW($1:$4),1)),1)+1,1))

以上是数组公式,需三键结束,下拉。

转载于:https://blog.51cto.com/1971372/2143387

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值