所谓一对多查找,就是根据一个条件,把多个符合条件的结果全部找出来。

其实吧,一对多查找不是什么,尤其是O365的Filter函数横空出世震撼全场之后,简直就是瞬间把所有传统的数组解法甩出去七八十来条街……

但是!

这世上有一种人,叫“没了Vlookup就吃不好睡不香”,但凡和查找搭上半点关系的问题,都必须肯定一定确定要用早已油腻的Vlookup大叔来解决。

Vlookup大叔表示,心累!

比如表格结构如下图的一个一对多查找问题:

好在V大叔有个特别之处,就是他的参数常常会弄出些意外,比如第一参数¥#¥%@……

再比如第二参数#¥%&¥#……

所以就生出了这么个野路子的公式:

=VLOOKUP(D$2,INDIRECT("a"&SMALL(IF(A$2:A$17=D$2,ROW($2:$17)),ROW(A1))&":b17"),2,)

好吧,这公式就这么一亮相,肯定是支持头晕模式的,还是一步一步来拆解吧。

首先,当我们遇到这个问题时,如果只需要找第一个“乙”所对应的“B”,V大叔的标准写法是:

=VLOOKUP(D$2,A2:B17,2,)

其中的A2:B17是查找范围,直接引用。如果改用间接引用,并不影响公式结果:

=VLOOKUP(D$2,INDIRECT("A2:B17"),2,)

即然用了间接引用,A2:B17就不再是单元格地址,而是变成了字符串,可以各种拆解了,比如拆解成这样:

=VLOOKUP(D$2,INDIRECT("A"&2&":B17"),2,)

这样一来,其中的2就被单独拎了出来,这其中就可以加上一个一对多查找的惯用手法:

=VLOOKUP(D$2,INDIRECT("A"&SMALL(IF(A$2:A$17=D$2,ROW($2:$17)),ROW(A1))&":B17"),2,)

文字解释一下就是如果A2:A17这些等于D2,也就是符合条件时,返回对应的行号,再用Small函数对返回的结果通过公式向下复制的方式从小到大排列。

所以这公式,就是这么回事了。

那么,为什么V大叔这么用就可以起到一对多查找的效果呢?如果把"A"&SMALL(IF(A$2:A$17=D$2,ROW($2:$17)),ROW(A1))&":B17"部分单独放在一个单元格里,前面加上等号,公式完成后再向下复制,就会得出A3:B17、A7:B17、A11:B17和A15:B17这样的结果。

说得再透明点就是,第一个公式是让V大叔在A3:B17这个范围内找D2对应的结果;向下复制到第二个公式是让V大叔在A7:B17这个范围内找D2对应的结果;继续向下复制到第三个公式是让V大叔在A11:B17这个范围内找D2对应的结果;第四个公式是让V大叔在A15:B17这个范围内找D2对应的结果。

所以这结果是正确的、愉快的、大得V大叔忠粉们心的、皆大欢喜的……

可偏偏这公式,是个野路子,因为,选取第二参数后按F9功能键,结果是奇特奇异奇怪的。

当然这结果也并非来自地球以外,之所以会这样,是因为Indirect的结果,是多维引用,而正经路子多维引用都是在外面套用SumIf、Subtotal、DSum这些函数, 且完成以后的公式还可以再在外面套函数,详参多工作表汇总的相关公式。

而V大叔用在这时,就只能这样了,想要在外面再套别的函数,那就……没结果了。

这是不是函数中的一个Bug呢?

但是,不管是真Bug还是假Bug,不管是正路子还是野路子,只要能解决问题,同时大得V大叔忠粉们的心,就是好路子!

最后提示一小下下,如果您的电脑不支持动态数组,公式结束后请按【Ctrl+Shift+Enter】组合键,以免乐极生悲。

Vlookup大叔与一对多查找(Excel函数集团)的更多相关文章

  1. 个人永久性免费-Excel催化剂功能第38波-比Vlookup更好用的查找引用函数

    谈起Excel的函数,有一个函数生来自带明星光环,在表哥表姐群体中无人不知,介绍它的教程更是铺天盖地,此乃VLOOKUP函数也.今天Excel催化剂在这里冒着被火喷的风险,大胆地宣布一个比VLOOKU ...

  2. Vlookup大叔早已油腻(Excel函数集团)

    1.Vlookup基础用法:https://mp.weixin.qq.com/s/0JRytWlBD-KYM2jkecG2rA 2.合并字符串:https://mp.weixin.qq.com/s/9 ...

  3. 查找与引用函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...

  4. 替DateDif哭诉一把(Excel函数集团)

    Excel中有个工作表函数DateDif,专门用来计算两日期之间的日差.月差.年差,传说十分好用. 具体用法在此就省略了,好奇的童鞋请自行*度~ 可是,在Excel里,他却是个"没户口&qu ...

  5. LET函数(Excel函数集团)

    LET函数,是个Office365新增函数,所以,还在用上古版本的童鞋请无视此篇哈~ 话说Excel中,有个自定义名称的功能,如下图,左右两个表分别自定义了"data1"和&quo ...

  6. 字符串函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...

  7. 日期与时间函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...

  8. 统计函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业! 谢谢 下载地址:https://officecommunity- ...

  9. 数组基础(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业! 谢谢 下载地址:https://officecommunity- ...

随机推荐

  1. mabatis的mapper文件找不到-ssm升级maven常见问题

    手里项目之前是普通ssm的,打算用业余时间升级一把. 1.首先,搭建好maven的ssm项目. 2.配置好jdk,tomcat环境,先启动. 3.启动没问题后将maven目录结构布置好后直接将原有项目 ...

  2. 力扣 - 剑指 Offer 10- I. 斐波那契数列

    题目 剑指 Offer 10- I. 斐波那契数列 思路1(递归 / 自顶向下) 这题是很常见的一道入门递归题,可以采用自顶向下的递归方法,比如我们要求第n个位置的值,根据斐波那契数列的定义fib(n ...

  3. Stream流的使用

    创建流 创建流的方式很多,从jdk8起,很多类中添加了一些方法来创建相应的流,比如:BufferedReader类的lines()方法:Pattern类的splitAsStream方法.但是开发中使用 ...

  4. JavaWeb 请求转发重定向

    请求转发和重定向 request除了可以作为请求对象之外,还可以作为域对象,但是该域对象的取值范围,是一次请求范围之内(浏览器地址栏没有发生跳转访问别的资源) 作用:将servlet中的数据通过req ...

  5. [省选联考 2021 A 卷] 矩阵游戏

    很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\), ...

  6. LGV 引理小记

    讲个笑话,NOI 之前某场模拟赛让我知道了这个神奇的科技,于是准备 NOI 之前学完,结果鸽着鸽着就鸽掉了,考 day1 之前一天本来准备花一天时间学的,然后我就开玩笑般地跟自己说,这么 trivia ...

  7. 洛谷 P7451 - [THUSCH2017] 杜老师(线性基+根分+结论题)

    题面传送门 看到乘积为平方数我们可以很自然地想到这道题,具体来说,我们对 \(1\sim 10^7\) 中所有质因子标号 \(1,2,\cdots,\pi(10^7)\),对于 \(x\in[l,r] ...

  8. 洛谷 P7879 -「SWTR-07」How to AK NOI?(后缀自动机+线段树维护矩乘)

    洛谷题面传送门 orz 一发出题人(话说我 AC 这道题的时候,出题人好像就坐在我的右侧呢/cy/cy) 考虑一个很 naive 的 DP,\(dp_i\) 表示 \([l,i]\) 之间的字符串是否 ...

  9. DirectX12 3D 游戏开发与实战第九章内容(下)

    仅供个人学习使用,请勿转载.谢谢! 9.纹理贴图 学习目标 学习如何将局部纹理映射到网格三角形中 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次贴图 ...

  10. Linux mount挂载磁盘报错 mount: wrong fs type, bad option, bad superblock on /dev/vdb

    Linux mount挂载磁盘报错  mount: wrong fs type, bad option, bad superblock on /dev/vdb Linux挂载磁盘报如下错误: moun ...