一、学习

一对多查询模式化数组公式:

=INDEX(区域,SMALL(IF(条件,行号数组,4^8),ROW(A1)))

三键齐按(ctrl+shift+回车)

在具有多个符合条件的情况下,提取和匹配方法~

我们需要解决三种类型的问题:

1,李商隐第一次出现时的B列值;

2,李商隐最后一次出现时的B列值;

3,李商隐第n次出现时候的B列值(假设n=2)。

前面两个问题是比较常见的,我们简要一看。

匹配第一个,可以直接用:

=VLOOKUP(E2,A2:B17,2,FALSE)

匹配最后一个,可以利用:

=LOOKUP(1,0/(A2:A17=E2),B2:B17)

这里重点要说明的是匹配第n个。

接下来就看一下这个类型的公式(数组公式,要按Shift+Ctrl+回车 三键结束):

{=INDEX(B$2:B$17,SMALL(IF(A$2:A$17=E$2,ROW($1:$16),4^8),2))}

先从最里层看:

IF(A$2:A$17=E$2,ROW($1:$16),4^8)

这个公式的结果是一个数组,它会依次判断A列值是否等于E2指定的条件。

等于E2时,则会返回对应的行号,如1、12、13等……

不等于E2时,则直接返回4^8,也就是65536,在Excel2003版本里,这个65536就是一列中的最大行号,一般的工作表到这里就没有数据了。

整个的结果就是:

{1;65536;……;65536;12;13;65536;65536;65536}

再往外看,是SMALL(X,2)

这个简单,就是从上面得出的数组X中,选出第二小的值12,其实也就是A2:A17中的姓名第二次等于E2指定的姓名时,其序列位置。

最外层是INDEX(B2:B17,y)

上面已经用SMALL函数得出了具体的位置,这一步,就是在B2:B17中提取出这个位置的值,完成!!

以上便是INDEX+SMAll+IF的数组公式类型,掌握这个,想要匹配什么位置,就可以匹配什么位置~~

假如把最后一个参数n,换成ROW(A1),那么就可以下拉公式,依次提取所有对应值了。

用INDEX(大区域,SMALL(IF(条件区域=条件,ROW(条件区域),4^8),ROW(A1)))&""这种方式去屏蔽错误值,这种屏蔽错误值的思路是,如果条件区域=条件就返回条件区域行号,否则返回一个比较大的用不到的行号,比如说4^8行或数据区域下面的一个空行行号。这样,INDEX在输出完所有符合条件的行后开始调用4^8行的值(空单元格),为了避免返回0所以再加上一个&""。

二、应用

查找机构下属流失最严重的4个代理,横向展示

 

公式如下

主要注意点,三键齐按、$引用

转载于:https://www.cnblogs.com/daoren/p/10321269.html

GitHub 加速计划 / ma / mall
44
12
下载
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
最近提交(Master分支:9 个月前 )
2066a552 - 6 天前
83fe3e70 - 13 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐