假设场景是从左边查找出指定产品和月份的数据,如红色方框标记。
这样的需求在实际工作中十分常见,被叫做交叉查找或者二维查找。
前些年陆续总结过交叉查找的方法,其中应用最广泛的是VLOOKUP+MATCH组合:
=VLOOKUP(SF2,SAS1:$DS7,MATCH(GS1,SAS1:SDS1,0),0)
即便是新函数新方法横行的今天,它仍然是胸有激雷而面如平湖,可拜上将军的狠角色。对于新手来说,其逻辑并不难理解,反而是其中的引用方式让人头大,总共4中引用方式这里用到3种。那就分享几个完美避开这个痛点的数组公式。
INDEX+MATCH
这对组合如同VLOOKUP+MATCH一样经典,在高版本中结合数组产生不一样的效果:
=INDEX(B2:D7,MATCH(F2:F4,A2:A7,0),MATCH(G1:H1,B1:D1,0))
熟悉的配方熟悉的味道,把MATCH的查找值设置为数组而已。
可以看出,MATCH的查找值设置为数组仍然是关键环节。
CHOOSEROWS+CHOOSECOLS+MATCH
逻辑是用CHOOSECOLS搭配MATCH从原始数据中选取需要的列,再用CHOOSECOLS搭配MATCH选取需要的行:
=CHOOSEROWS(CHOOSECOLS(B2:D7,MATCH(G1:H1,B1:D1,0)),MATCH(F2:F4,A2:A7,0))
REDUCE遍历
REDUCE+LAMBDA+HSTACK/VSTACK组合EXCEL365版本带来的新函数新思想,原理是把某种计算按指定因素遍历执行多次,每次执行的结果堆叠起来。
以下公式的核心计算式用双XLOOKUP去查找,REDUCE+LAMBDA使得这一操作被重复多次,HSTACK则将每次计算的结果横向堆叠:
=DROP(REDUCE(,G1:H1,LAMBDA(x,y,HSTACK(x,XLOOKUP(F2:F4,A2:A7,XLOOKUP(y,B1:D1,B2:D7)))),1)
同样的套路,把前文说到的经典VLOOKUP+MATCH作为核心计算,REDUCE+LAMBDA使其多次执行,VSTACK把每次计算的结果纵向堆叠:
=DROP(REDUCE(",F2:F4,LAMBDA(x,y,VSTACK(x,VLOOKUP(y,A1:D7,MATCH(G1:H1,A1:D1,0),0)),1)
这种方法未必比前面的简单实用,但这是新思路,是一种全新的公式构建方式,建议玩一玩 可以锻炼脑子。
GROUPBY
如图所示,黄色区域指定要查找的产品和月份,GROUPBY构建公式一键输出表头和结果:
GOUPBY是高版本中强得可怕的数据汇总函数,此处通过第二参数中的CHOOSECOLS获取指定月份的数据,第七参数中的COUNTIF筛选指定的产品,再用SUM汇总数据,因为数据中并没有同类项,SUM并不会产生任何的求和计算。
=GROUPBY(A1:A7,CHOOSECOLS(B1:D7,MATCH(G1:G2,B1:D1,0)),SUM,3,,,COUNTIF(F1:F4,A1:A7))
这些数组公式再搭配上区域修剪函数TRIMRANGE,还能实现数据增减时自动更新结果。
DeepSeek定制版VBA代码助手

最懂VBA的AI,VBA代码助手(vbayyds.com)
AI一键提问写代码, 代码翻译, 一键混淆加密,中文输入提示
买课程可进永久答疑群,课程可免费试学点击下方链接 v.excel880.com


好了,今天的Excel小课堂就到此结束,大家赶紧实际操作联系一下吧,有不懂的问题可以留言问我!感谢关注Excel880,还请多多转发,持续关注我们呀!