二维数据的查询在Excel中是十分常见的场景,如下图所示,要从左边的数据中找到指定姓名的各项信息。
本文介绍Excel365版本下该类问题的解决方案。
非365版本VLOOKUP+MATCH
在过去几十年中这对组合是解决二维数据查询的中坚力量:
=VLOOKUP($G3,$B:$E,MATCH(H$2,$B$1:$E$1,0),0)
MATCH返回各个查找项目在原始数据区域中的列数作为VLOOKUP动态参数,是该方案的核心所在。
这对超级CP解决了着实帮助很多用户解决了问题,但也继承了VLOOKUP只能从左往右查找的的局限性,所以示例中无法查找“部门”数据。
非365版本INDEX+MATCH
INDEX完美解决VLOOKUP的局限,但这一方法略有难度,特别是繁琐的相对引用设置对入门级用户极不友好:
=INDEX($A:$E,MATCH($G3,$B:$B,0),MATCH(H$2,$1:$1,0))
核心逻辑是用两个MATCH分别作为INDEX的动态参数,动态获取要查找数据的行列位置。
365版本CHOOSECOLS/ CHOOSEROWS+MATCH
Excel365版本中可以用新函数解决:
=CHOOSEROWS(CHOOSECOLS(A:E,MATCH(I2:L2,1:1,0)),MATCH(H3:H6,B:B,0))
公式很长其实是因为CHOOSEROWS和CHOOSECOLS很长,其逻辑相比前两种方法都更简单。
MATCH在第一行中查找各查找项的列位置作为CHOOSECOLS的第二参数,使得CHOOSECOLS可以从A:E中提取到对应的列。
在上一步的基础上提取查找姓名对应的行数据,要点仍然是用MATCH在B列查找这些姓名对应的行位置,作为CHOOSEROWS的第二参数。
该方案另一个显而易见的好处,无需向下向右填充公式,无需繁琐的相对引用绝对引用锁定步骤。
365版本改进CHOOSECOLS/ CHOOSEROWS+MATCH+TOROW/TOCOL
改进版公式:
=CHOOSEROWS(CHOOSECOLS(A:G,MATCH(TOROW(I2:Z2,3),1:1,0)),MATCH(TOCOL(H3:H100,3),B:B,0))
改进的目的是支持数据的扩展。
如图所示,在F列和12行新增数据,同时在查询条件中也相应新增数据,无需改动公式就能实现自动更新。这一招应对动态数据十分有效,很多场合的数据会随时增减。
(题外话:超级表也能实现同样的功能)
核心要领是搭配TOROW和TOCOL,启用其第二参数忽略空值,以此达到扩展范围的目的。
再强调一遍,公式很长只是因为函数名字很长,其实逻辑很简单,拆开来看各个函数的用法也很简单。总之365版本中的方案学习成本低,效率高。