查询专题

查询和聚合统计是一般工作中最常遇到的需求,本文将为大家整理常见的需求,各种解法!都学会,查询将随心所欲,不再是个问题!
提示:普通公式直接回车,数组公式:Ctrl+Shift+Enter录入
案例1 | 首次记录-张三第一次销售金额
普通公式:
=VLOOKUP(A17,B1:G12,COLUMNS(B1:G12),)
VLOOKUP再熟悉不过,不过多解释,以上公式和=VLOOKUP(A17,B1:G12,6,) 效果完全一样!使用COLUMNS($B$1:$G$12) 有什么好处,简单,不过多少列,都自动获取到,不用一个一个数!
扩展学习推荐->COLUMNS超详细用法
更多解法公式:首次查询方法合集(超多超详细)
案例2 | 最后一次-张三最后一次销售金额
数组公式(VLOOKUP死忠粉选择):
=VLOOKUP(1,IF({1,0},0/($B$2:$B$12=A17),$G$2:$G$12),2)
这里第四参数为省略默认TRUE,近似查找,遵循“二分法”查找原理,同LOOKUP乱序查找,只是这里需要构建条件和结果两列!
扩展学习:VLOOKUP反向查找中的IF({1,0}是什么意思?
普通公式(推荐):LOOKUP更简单一些
=LOOKUP(1,0/($B$2:$B$12=A17),$G$2:$G$12)
扩展学习:进阶用LOOKUP
案例3 | 任意第几次查找-张三的第三次销售金额
数组公式:
=INDEX(G:G,SMALL(IF($B$2:$B$12=$A17,ROW($B$2:$B$12)),3))
第几次出现的控制在公式中的3,如果要查询第四次把3修改为4即可!
案例4 | 一对多-张三的全部销售记录金额
数组公式:
=IFERROR(INDEX(G:G,SMALL(IF($B$2:$B$12=$A$17,ROW($B$2:$B$12)),ROW(A1)))&"","")
第一个&"",是为了避免销售金额是空,查询结果显示为0,第二个""是把错误值显示为空,是IFERROR函数的第二参数!
扩展学习:最强查询组合INDEX+MATCH
案例5 | 多条件查询-首次记录
数组公式:
=VLOOKUP(A17&"|"&B17,CHOOSE({1,2},$B$2:$B$12&"|"&$D$2:$D$12,$G$2:$G$12),2,0)
CHOOSE 的作用同IF({1,0}),详细看案例2中的扩展学习,这里的 "|" 主要是为了容错,避免类型类似如下的情况 姓名:张火, 名称:火龙果,和 姓名:张火火, 名称:龙果,本质二者不一样,不加分隔符组合后就是一样的!
案例6 | 多条件查询-最后一次记录
普通公式:
=LOOKUP(1,0/($B$2:$B$12=A17)/($D$2:$D$12=B17),$G$2:$G$12)
使用较为频繁,也是推荐的方法!
案例7 | 多个最值记录返回-返回张三销售最高的记录(最后一条)
数组公式:难度较大
=INDEX($A$1:$G$12,RIGHT(MAX(IF($B$2:$B$12="张三",ROW($B$2:$B$12)+$G$2:$G$12/1%%%)),3),COLUMN(C1))
公式看上去难度较大,数组入门后看懂问题不大,主要是利用“权重”,如果一个数在一组数中最大,那么这组数同时扩大N倍,最大数还是原来那个,不会改变!利用这点觉得类似的问题,也就是常见的思路-权重!
金额/1%%%+行号 ,这样金额是主权重,扩大1000000,加上行号,可以区别金额相同的问题,最后一次也就是金额相同就看行号,最大的那个,MAX即可,本案例中MAX结果(499500009,最后使用RIGHT截取行号(3位)即可,如果金额较大,可以多扩大一些,确保最后截取不会截取到金额
根据查询条件返回多列的,参考这里的INDEX第三参数COLUMN,不再另举例
扩展学习:简单谈谈不简单的ROW和COLUMN两兄弟!
最小值同理,不再啰嗦!
案例8 | 反向查询
普通公式:
=INDEX($C$2:$C$12,MATCH(A17,$D$2:$D$12,))
反向查询方法合同,这里推荐INDEX+MATCH组合,比较简单!
VLOOKUP反向查询视频教程:VLOOKUP反向查询原理详解
案例9 | 合并单元格查询
普通公式:
=LOOKUP("座",OFFSET($A$2,,,MATCH($A$17,$B$2:$B$12,)))
关于“座”用法详解:公式中特殊符号详解
案例10 | 多层合并单元格
普通公式(非365三键录入):
=COUNTA(INDEX($C$1:$C$13,LOOKUP(1,0/(LOOKUP(ROW($2:$13),IF($B$2:$B$13<>"",ROW($2:$13)),$B$2:$B$13)="A公司"),ROW($2:$13))):INDEX($C$1:$C$13,MATCH("华北区域",$A$1:$A$13,)))
过于复杂,函数骨灰级粉可以研究一下,其他人员不推荐深入!
不过其中包括两个有价值的知识点:
1、INDEX结果是一个引用(可以和单元格或者INDEX直接连接)
2、LOOKUP(ROW(区域),IF(区域<>"",ROW(区域)),区域) 基本是通用的做法,可以把合并单元格在内存中填充(合并单元格使用首个填充),类似于辅助列定位-空值-使用上一个单元格填充!
能想到的,都给大家汇总于此,这也算是对我自己所学知识的一次小小总结吧!
大部分涉及到的基础知识已给出相关的文章链接,有不懂的可以看扩展链接,say 88~~
(0)

相关推荐