掌握这个函数,能够实现Vlookup无法完成的多重匹配!

2018-09-10 13:00:03 64点赞 635收藏 34评论

微信公众号:Funincode

难度:Excel高级函数

适用场景:返回多重匹配

阅读时间:5分钟


我们都很清楚如何使用VLookup进行单一的匹配查询,那么有没有办法实现多重匹配查询呢?,比如下图所示:我们需要在F2:F4的区域分别返回查询A2:B6区域,对应产品A在B列的第1,2,3个值。

元数字需要匹配元数字需要匹配



那么怎么实现呢?我们接下来进行一步步分解!

最外层Index函数:Index函数可以返回一个序列中指定位置的数据。如图,我们可以返回在B2到B6区域,排序第1的数。

Index 函数使用Index 函数使用



第2个A出现在第4行,因此我们继续输入函数,将之前的1换成4,就能返回222了!

Index 示例Index 示例



那么接下来的问题就转化为:如何智能的返回A在序列A2:A6的序号1,4,5呢? 接下来就要隆重推出Aggregate函数了!它于数组和ROW函数结合就能实现这个目的!

Aggregate 函数Aggregate 函数



这个看似复杂的函数,我们怎么理解它呢?

AGGREGATE 函数的参数AGGREGATE 函数的参数



它的第一个参数function_num, 通过输入不同的值,我们可以选取不同的计算逻辑,这里因为我们要按顺序从小到大选择匹配的值,因此我们选择SMALL函数,它的参数为15

有多重选项有多重选项



第二个参数option,可以让我们选择是否忽略隐藏和错误值,此时我们选择3输入。

第二个参数的选择第二个参数的选择



第三个参数需要录入分析的数组,我们在这里使用了一个很复杂的数组公式,其中($A$2:$A$6=$E$2)会产生一个(TRUE,FALSE,FALSE,TRUE,TRUE)的数组,将其除以自身,会转换成一个 (1, #div0, #div0, 1, 1)的新数组,让我们再看(ROW($A$2:$A$6)-ROW($A$1)这个数组,它会形成一个从1开始的顺序序列 (1,2,3,4,5),与之前的数组相乘,便得到了下图H2:H6的数组序列了!

组合运用组合运用



将这个顺序序列嵌入到之前的Aggregate函数中作为第3个参数,这三个参数就很好的确定了需要分析的集合为(1, #div0, #div0, 4, 5),从当中从小到大选择排位第k的数据,且忽略隐藏和错误!那么这里的k就是我们的第4个参数!

这里的k我们使用ROWS($A$2:A2)函数,rows函数能返回所选区域的行数,通过锁定$A$2, 我们通过下拉可以增加区域的行数,进而让k能够从1变成2,变成3。。。。。。

整合以后就是完整版的Aggregate函数了!

嵌套使用嵌套使用



最后我们把aggregate函数替换之前Index函数的第二个参数,就形成了最终公式!怎么样,快来练习吧!

最终的样子最终的样子



在Excel2016里,还有一种更为简单的办法,让我们在下期节目介绍! 请关注我们 FuninCode 哦!

展开 收起
34评论

  • 精彩
  • 最新
  • 我选择导入access用SQL语句…

    校验提示文案

    提交
    嗯嗯 不用导入 Access,在 Excel 里面也可以写 SQL。 我们之前有写过一篇

    校验提示文案

    提交
    其实主要是excel的数据不够标准化,导致这么复杂哎

    校验提示文案

    提交
    收起所有回复
  • 我反正用excl解决不了,就用odbc导入到oracle中,想怎么搞就怎么搞。

    校验提示文案

    提交
    嗯 个人用户很少有自己可用的数据库,有数据库的话,就方便很多了。

    校验提示文案

    提交
    杀鸡怎么能用牛刀,而且,如果是需要把这个excel表做好公式发给别人,难道教人家怎么用SQL咩

    校验提示文案

    提交
    收起所有回复
  • 不是可以直接筛选么

    校验提示文案

    提交
    lol 我就知道有人会这么问, 理解这个技巧可以解决更多复杂的需求,我们在这里是简化了问题和需求本身。

    校验提示文案

    提交
    假设有两个111,结果会是什么?

    校验提示文案

    提交
    收起所有回复
  • 不错,我让助理小妹子多学学,这样白天有事儿她来干。

    校验提示文案

    提交
    没事的时候呢

    校验提示文案

    提交
    没事的时候找她来干啊 [得逞]

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 很好用,我原来是添加了辅助列,再用VLOOKUP函数做的,不知道这种数组数据量大了会不会卡。

    校验提示文案

    提交
  • 一般场景应用VLOOKUP就够了吧

    校验提示文案

    提交
  • 看的有点晕,上班来试试!

    校验提示文案

    提交
  • 666666666666

    校验提示文案

    提交
  • 复杂到那段看不懂啊

    校验提示文案

    提交
  • 还不错谢谢分享

    校验提示文案

    提交
  • 签到签到了

    校验提示文案

    提交
  • 签到签到签到

    校验提示文案

    提交
  • 看看学习一下。

    校验提示文案

    提交
  • 居然还能学到这个 [喜极而泣]

    校验提示文案

    提交
  • 牛*牛*牛*

    校验提示文案

    提交
  • 支持支持!

    校验提示文案

    提交
  • 不错,支持一下

    校验提示文案

    提交
  • 哈哈,我来看你啦,我的哥。

    校验提示文案

    提交
  • 文章很好不错 支持一下

    校验提示文案

    提交
  • 这么麻烦的公式。。。。不如用countif公式给一样的值编号。。。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
635
扫一下,分享更方便,购买更轻松