谁让你不会excel万金油公式

时间:2022-03-26 00:57:01 

总是听到高手们说有个万金油公式,可到底什么是万金油公式,这个公式又能干什么呢?不妨先看看下面这个效果图:

谁让你不会excel万金油公式

 

这个例子就是一个典型的一对多查找,查找条件是部门,在数据源内每个部门对应的都是多个数据,万金油公式最主要的用途就是用来解决一对多查找等一些相对复杂的问题。上面动画中的公式为:

=IFERROR(INDEX($A$2:$D$21,SMALL(IF($C$2:$C$21=$F$2,ROW($1:$20),99),ROW(A1)),MATCH(F$3,$A$1:$D$1,0)),"")

看到这个公式,或许很多朋友都会惊叹:这么长的公式,看不懂哇!今天本汪就和大家一同破解这个看不懂但又很强悍的公式套路,耐心往下看哦…

上面这个公式一共用了六个函数:IFERROR、INDEX、SMALL、IF、ROW和MATCH,其中的IFERROR和MATCH是本例中辅助性的两个函数,其余的四个INDEX-SMALL-IF-ROW就是万金油公式啦。

因此我们先来学习这个核心部分的原理:

F4单元格的公式为:

=INDEX($A$2:$A$21,SMALL(IF($C$2:$C$21=$F$2,ROW($1:$20),99),ROW(A1)))

谁让你不会excel万金油公式

 

先从INDEX说起,这个函数基本功能是给出一个区域,然后根据对应的行列位置返回查找结果,上图中INDEX查找的数据区域就是姓名所在的区域$A$2:$A$21。

INDEX函数的基本结构是:INDEX(查找区域,第几行,第几列),如果区域是单行或者单列的话,后面两个参数可以省略一个。通俗点说,你拿着电影票去找座位,整个大厅的座位就是区域,第几排第几座就是公式中的后面两个参数,通过这种方式可以准确找到目标位置。在上面这个例子里,区域是在一列,所以我们只需要确定每个数据在第几行就行。明白这一点的话,我们的重点就该放到INDEX的第二个参数了:

SMALL(IF($C$2:$C$21=$F$2,ROW($1:$20),99),ROW(A1))

谁让你不会excel万金油公式

 

注意看上面这个图,销售部一共有四条记录,分别在数据区域的第5、8、9和16行(数据区域是从第二行开始)。因此我们希望公式下拉的时候,INDEX的第二个参数分别是5、8、9和16这四个数字(这一点一定要想明白)。注意,接下来我们即将接触到万金油最核心的部分,请保持高度集中的注意力……

SMALL函数的基本结构:SMALL(一组数,第几小的数)

建议自己模拟个简单的数据来充分理解这个函数,方法如下:

谁让你不会excel万金油公式

 

在A列输入一些数字,公式的意思是这列数字中最小的一个,结果是2。很好理解对不对,将公式的第二个参数改成2,再看看结果:

谁让你不会excel万金油公式

 

第二小的是4。

如果希望继续得到第三小的数,该怎么做我想大家都能想到。但是会有个问题,我们只能手动修改第二参数,并不能通过下拉来实现这个参数的变化。如果想要下拉来实现参数变化的话,第二参数就需要用到ROW函数,也就是这样修改:

谁让你不会excel万金油公式

 

ROW函数非常简单,得到的就是参数的行号,通过这个公式,我们就把A列的数据从小到大排了个序,觉得有意思吗?回到我们的万金油公式,5、8、9和16这四个数字代表什么意思还记得吧,我们需要用SMALL函数依次得到这四个数字,思路是通过判断C列是否与F2一致,如果一样得到行号,如果不一样,就得到一个比最大行号还大的数字(目的是为了防止被查找到):

谁让你不会excel万金油公式

 

要实现这个目的,就需要IF函数的介入,于是就有了:

IF($C$2:$C$21=$F$2,ROW($1:$20),99),用这一段来作为SMALL的第一个参数。关于这段IF,就比较容易理解了,我们可以借助F9来看看这段公式的结果:

谁让你不会excel万金油公式

 

因为我们的数据就20个,所以IF的第三个参数使用99就足够了,如果数据量比较大的话,可以用9^9,表示9的9次方,反正足够大就行。

搞清楚这个IF的话,再来看这段

SMALL(IF($C$2:$C$21=$F$2,ROW($1:$20),99),ROW(A1))是不是就没那么晕了。

关于SMALL这部分,一定要明白是随着公式下拉的时候,逐个得到我们希望得到的那几个数字,然后用这些数字作为INDEX的第二参数,就可以得到最终需要的结果。

万金油的核心就是INDEX、SMALL、IF和ROW,请大家务必反复琢磨,把这部分原理搞清楚。还有非常重要的一点需要强调,万金油公式是一个数组公式,因此需要我们按Ctrl+Shift+回车得到计算结果。至于一开始的公式,考虑到要查找多列的内容,所以INDEX的数据区域用的$A$2:$D$21。多列的时候,就需要提供列位置才能找到目标值,因此用MATCH(F$3,$A$1:$D$1,0)来确定数据在第几列。

每个部门的数据都不一样多,我们需要将公式多向下拉几行,这时候就会产生一些错误值,在公式的最外层使用IFERROR函数屏蔽了错误值,使得查询结果看起来非常干净。

谁让你不会excel万金油公式的下载地址:


     

标签:excel万金油公式
0
投稿

猜你喜欢

  • 注册表被锁怎么办?Win10 1909注册表解锁方法分享

    2023-11-11 20:17:03
  • Excel2016“最近使用的文档 ”显示个数如何设置?

    2023-09-30 23:22:48
  • Word中Rand函数不起作用/没反应/不出现文字/无效

    2023-03-06 08:22:47
  • excel函数公式复制的操作方法

    2022-11-09 17:20:18
  • word2007实时预览功能怎么启用

    2023-12-07 13:35:15
  • 如何在excel中显示人民币大写的样式

    2023-02-15 23:36:42
  • 怎样用Word制作组织结构图?

    2023-04-13 18:32:27
  • 总结几个办公常用的excel小技巧

    2022-07-26 23:33:03
  • 如何用excel做图表,实例一步一步为您解答excel如何制作图表

    2022-03-17 12:57:08
  • word如何设置背景

    2023-11-21 01:04:23
  • Win10 1909无法设置默认保存位置如何解决?

    2023-12-10 10:36:25
  • 怎样将caj文件的图片复制到word上

    2023-02-19 13:18:00
  • excel表格怎样使用列求和公式

    2023-06-28 03:53:06
  • word怎么设置不同的页眉页脚

    2022-07-08 10:14:43
  • Word中创建宏的攻略

    2022-02-24 16:20:35
  • Microsoft onenote图片转文字的功能该怎么实现?

    2023-08-10 04:09:05
  • 把阿拉伯数字变成中文的NumberString函数的使用实例

    2022-11-17 11:28:57
  • Excel中进行函数批量操作合并单元格的操作方法

    2023-06-24 02:13:11
  • excel2003固定行列不动的方法

    2022-12-05 13:51:48
  • Word常见问题之总默认打开上次文档怎么办

    2023-02-28 04:30:43
  • asp之家 电脑教程 m.aspxhome.com