EXCEL技巧:万金油公式

2023-02-11 16:59:27 42点赞 340收藏 9评论

Excel中有一个几乎“万能”的函数组合,她就是Index+small+if+row组合,也称为“万金油的组合公式”。在日常工作中的应用非常广泛,今天我们就来了解这个万金油公式。

很多朋友在Excel中用公式做查询的时候,都必然会遇到的一个麻烦问题:那就是一对多的查找问题。

大多数朋友做查询都是从vlookup、index-match组合入门的,然而遇到一对多查询的时候,如果不加辅助列,往往会束手无策,今天我们要讨论的Index+small+if+row组合,就是专门解决一对多查询的一个通用公式。

如果你能完全掌握这个思路的话,不夸张的说,在Excel中基本上就没有什么查询可以难住你了 。好了,言归正传,先看一个效果图,到底一对多查询是怎样的:

EXCEL技巧:万金油公式

其中的公式是:=IFERROR(INDEX($A$1:$C$15,SMALL(IF($A$1:$A$15=$E$2,ROW($B$1:$B$15),10^3),ROW(B1)),COLUMN(B1)),"")

不过要想彻底理解这个公式,还得有一些储备知识,例如简单的数组应用,index、small、if和row这几个函数的基本用法也是要了解的。在之前的文章中,index、if、row函数都有介绍过。在这里也提一下:

首先,来看下index函数,这个函数基本功能是给出一个区域,然后根据对应的行列位置返回查找结果,index一共需要三个参数,第一个参数是数据范围,刚才说了,第三个参数是要查找的内容位于这个范围的第几列,本例中因为要对应查找三列数据,并且列的位置是对应的,所以用了column函数,如下图所示:三个红色的框,第一个是数据范围,第二个是第几行,第三个是第几列。

EXCEL技巧:万金油公式

其中最难理解的就是第2个参数。接下来我们来展开第2个参数。这个参数的作用是要查找的内容位于数据区域的第几行,如果是一对一的查找,我们可以指定行号或者用match函数来取得行号,但这里是一对多,例如部门是蜀汉的,分别对应了五个行号,如下图所示:

EXCEL技巧:万金油公式

重要提醒:对这五行数据在表格中的行号我特别标注出来了,分别是2、3、11、12和15,但请注意一点,如果index第一参数所给到的区域并不是从第一行开始的,那么得根据第一参数的区域内的行数。假如第一个参数是从第2行开始的话,那么对应的行数将减去1,分别是1、2、10、11、14。

实际上,这五个数据在index给到的范围中,分别位于第2、3、11、12和15行,也就是我们希望得到的结果。

对于蜀汉

第一次出现时应该是index(数据范围,2,列位置);

第二次出现时应该是index(数据范围,3,列位置);

第三次出现时应该是index(数据范围,11,列位置);

第四次出现时应该是index(数据范围,12,列位置);

第五次出现时应该是index(数据范围,15,列位置);

。。。。。。

从上面来看,其中发生改变的就是第2个参数,行数在发生变化。

这就是一对多的核心,请务必理解。

为了将这一想法变成结果,就出来了small+if+row,而这三个函数的组合实际上才是真正的万金油!

接下来我们来看small函数

其函数结构是SMALL(array,k),k 为返回的数据在数组或数据区域里的位置(从小到大),array查找的数据区域。也就是第k个最小的位置

Small函数的作用是在给出的一组数据中挑出指定的第几个最小值,第一个参数是一组数字,第二个参数是一个数字。来我们来看下面这个动图

EXCEL技巧:万金油公式

图中有9个数,分别是1,2个2, 2个3,2个5,6、8.

如果公式是=SMALL(A$1:A$9,1),则返回第一个最小值1

如果公式是=SMALL(A$1:A$9,2),则返回第二个最小值2

如果公式是=SMALL(A$1:A$9,3),则返回第三个最小值2

如果公式是=SMALL(A$1:A$9,4),则返回第四个最小值3

如果公式是=SMALL(A$1:A$9,5),则返回第五个最小值3

如果公式是=SMALL(A$1:A$9,6),则返回第六个最小值5

这也是上图中显示的结果。

注意,这里的第二参数我们是手动输入的,因为把第一个公式下拉的话,第二参数1是不会变的,如果需要第二参数会自己变,就需要借助ROW函数!(row出现)看下图

EXCEL技巧:万金油公式

这是一个公式下拉的结果,好像是对A列进行了排序一样的效果,有点意思吧~~~

说完row函数后。我们整体来看下这个公式中

我们想要的是2、3、11、12和15行,要通过small得到这几个数字,有个思路就是:

部门是蜀汉的,按对应的行号标注;

不是蜀汉的,都看作比数据中最大的行数要大的数(这个数其实是行号,因为一共15个数)。

而要实现这个目的,只能通过if实现。

(IF($A$1:$A$15=$E$2,ROW($B$1:$B$15),10^3),之前的公众号文章中也有介绍IF函数的,if函数的基本逻辑,想必大家也比较清楚,标黄色部分的意思是给定的区域数据,是否等于E2的值,如果是的话,将返回 ROW($B$1:$B$15),否则就返回10^3(这个数只要比数据的行数大即可,为了不超过数据区域最大的行数,这里往往是写的比较大的数据)

我们来看看IF($A$1:$A$15=$E$2,ROW($B$1:$B$15),10^3)这一段的运算结果吧:

EXCEL技巧:万金油公式

从上图中,你注意到2、3、11、、12和15了吗?

到这里,small函数的这部分是不是明白了,也就是index函数的第2个参数。

如果明白了,我们接着来看。将small函数代入到index函数中,就是我们看到的公式=INDEX($A$1:$C$15,SMALL(IF($A$1:$A$15=$E$2,ROW($B$1:$B$15),10^3),ROW(B1)),COLUMN(B1))

百科Microsoft 微软 OFFICE 365 个人版 办公软件Office 365是微软推出的订阅式软件服务,订阅用户可以收到最新的Office更新,更新推送的速度比Office 2016这类一次性购买的版本要更快,且可以跨版本(如2016年年底购买,17年年中Office 2017发布,Office 365订阅用户可升级至最新的版本)。Office 365的另一特性是云端同步,基于OneDrive云存储,可以在多地、多台设备上访问文档、联机编辑,无需本地备份、U盘拷贝。包含Word、Excel、PowerPoint、OneNote、Outlook、Publisher、Access、OneDrive完整套装,非常适合移动办公、多台办公设备的用户。个人版可支持1个用户使用,最多5台设备,1TB OneDrive 容量。 0 点评3 原创0 好价164去购买查看详情

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
9评论

  • 精彩
  • 最新
  • EXCEL需要哪个版本?公式拷进去后,结果无法复现啊 [喜极而泣]

    校验提示文案

    提交
    是不是需要按数组三键,即同时按shift+Ctrl+enter

    校验提示文案

    提交
    果然是需要数组三键

    校验提示文案

    提交
    收起所有回复
  • 自从有了Python,我就再没这些烦恼了,再麻烦都能做出来,条件随便加,且容易理解很多,这种只是小意思。

    校验提示文案

    提交
  • 看不懂,这是我学不会的

    校验提示文案

    提交
  • 准备好好学习研究一下

    校验提示文案

    提交
  • 先点赞,再细看

    校验提示文案

    提交
  • 点赞,收藏,以后学。。。

    校验提示文案

    提交
  • 进我的收藏夹吃灰吧

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

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