Excel一对多查询(index+small+if)
一、学习
一对多查询模式化数组公式:
=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个代理,横向展示

公式如下

主要注意点,三键齐按、$引用
Excel一对多查询(index+small+if)的更多相关文章
- Excel一对多查找
		
很多人在Excel中用函数公式做查询的时候,都必然会遇到的一个大问题,那就是一对多的查找/查询公式应该怎么写?大多数人都是从VLOOKUP.INDEX+MATCH中入门的,纵然你把全部的多条件查找方法 ...
 - 三层架构的一点理解以及Dapper一对多查询
		
1.首先说一下自己对三层架构的一点理解 论坛里经常说会出现喜欢面相对象的写法,所以使用EF的,我个人觉得他俩没啥关系,先别反对,先听听我怎么说吧. 三层架构,基本都快说烂了,但今天还是说三层架构:UI ...
 - mybatis0205 一对多查询 复杂
		
查询所有用户信息,关联查询订单及订单明细信息及商品信息,订单明细信息中关联查询商品信息 1.1sql 主查询表:用户信息 关联查询:订单.订单明细,商品信息 SELECT orders.*, user ...
 - mybatis0204 一对多查询
		
查询所有订单信息及订单下的订单明细信息. sql语句 主查询表:订单表 关联查询表:订单明细 SELECT orders.*, user.username, user.sex , orderdetai ...
 - atitit.导出excel的设计----查询结果 导出为excel的实现java .net php 总结
		
atitit.导出excel的设计----查询结果 导出为excel的实现java .net php 总结 1. 基本的流程 查询获得list 读取jsp的table获得标题and 字段的map to ...
 - Mybatis一对多查询得不到多方结果
		
一对多查询:一个年级对应多个学生,现在要查询年级(带学生)信息. 查询结果: [main] INFO com.java1234.service.GradeTest - 查询年级(带学生)[main] ...
 - 非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通过id进行维护与建文件
		
非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通 ...
 - flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询
		
一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课程,可以有多个学生修同一门课,同时,一门课也有很多学生. 一对多查询 如果一个 ...
 - sql 一对多查询
		
1. 一对多查询 查询departmentinfo字典下所有部门的人员数量 select * from departmentinfo a left join (select count(*) User ...
 
随机推荐
- ADDCOMPONENT之后立即(同步)调用AWAKE,但START却是所有AWAKE完成后才调用 的(异步)
			
addcomponent 等价于 instance了一个组件,完成后立即从该点调用awake(). 等到游戏中所有组件都被awake()之后,start()才会被调用.示例如下: class MyTe ...
 - Delphi三层开发小技巧:TClientDataSet的Delta妙用
			
Delphi三层开发小技巧:TClientDataSet的Delta妙用 转载 2014年10月13日 09:41:14 标签: 三层 / ClientDataSet 318 from :http:/ ...
 - Cannot subclass final class class com.sun.proxy.$Proxy16
			
Cannot subclass final class class com.sun.proxy.$Proxy16 2016年05月04日 19:10:58 阅读数:15028 背景 这个错误是我在使用 ...
 - ubuntu16.04 安装opencv3
			
(opencvC++) luo@luo-ThinkPad-W540:20181205$ conda install --channel https://conda.anaconda.org/menpo ...
 - CloudStack + KVM + HA
			
KVM高可用性CS4.2暂时没有实现 The Linux Kernel Virtual Machine (KVM) is a very popular hypervisor choice amongs ...
 - HTTP 499状态码 nginx下499错误详解-乾颐堂
			
日志记录中HTTP状态码出现499错误有多种情况,我遇到的一种情况是nginx反代到一个永远打不开的后端,就这样了,日志状态记录是499.发送字节数是0. 老是有用户反映网站系统时好时坏,因为线上的产 ...
 - [Training Video - 4] [Groovy] Initializing log inside class with constructor
			
TestService s = new TestService(log,context,testRunner) s.xyz() class TestService{ def log def conte ...
 - cJSON结构体构建
			
cJSON结构体构建 一:cJSON的构建. int create_objects() { cJSON *root, *fmt, *img, *thm, *fld; char *out; int i; ...
 - nuget get-package id显示不全
			
Get-Package | ft -AutoSize 参考 https://stackoverflow.com/questions/5036719/is-there-a-way-to-get-the- ...
 - 查看并解除Oracle锁
			
当某个数据库用户在数据库中插入.更新.删除一个表的数据,或者增加一个表的主键时或者表的索引时, 常常会出现ora-00054:resource busy and acquire with nowait ...