[Excel] 大杀器vlookup的再次「进化」

Excel的大杀器vlookup虽然功能强大, 但是只能支持单列的搜索。即使原始数据是由50×50的数据表组成,显然也是很费时间(废手)的,比如……

你的老板给你这样格式的excel:

然后让你填充这样的汇总:

怎么办? 怎么办? 怎么办?

==那么,如何在区域范围内达到类似“vlookup”的功能呢?==

我们给出一种思路,因为ID(Apple, Orange…)和其属性的相对位置都是一样的,那么只要找到ID所在单元格,然后作相应的位置偏移,即可得到对应结果的值。 那么我们只需要做2件事就可以了: 1、 找到ID的位置 2、 作相应偏移

Step 1: 如何根据内容找到单元格地址?

(这是一句非常标准的,可以在各大搜索引擎得到答案的搜索用问句。下面给出一种但不是唯一的解决方案) 关键词:Address,数组组合键(Ctrl + Shift + Enter) 公式: =={=ADDRESS(MIN(IF(查询范围=目标单元格,ROW(查询范围))),MIN(IF(查询范围=目标单元格,COLUMN(查询范围))))}==

我们先来解读一下这个公式的逻辑, 1、 现在区域范围内找到与我们要查找的内容相等的单元格,并且取得该单元格的行号和列号 ==IF(查询范围=目标单元格, ROW(查询范围))== ==IF(查询范围=目标单元格, COLUMN(查询范围))== 2、 当区域内可能存在多处重复值时,取最先出现的结果(最小目标行号/列号)。这个操作只是为了防止多结果情况下随机取到了行列不对应的情况,所以选MAX值也可以。 ==MIN(IF(查询范围=目标单元格,ROW(查询范围)))== 3、 输入其它参数(引用类型,结果样式….) 不知道大家有没有注意到上面给出的公式被一个大的花括号括住了呢? 这个=={}==其实并不是输入的,而是在输入完公式后把常用的回车(Enter键)改成了数组组合键(Ctrl + Shift + Enter)。那么到底什么是数组组合键以及它强大的适用范围我们下次再讲! 现在大家先留一个印象,涉及到多个数值项的运算(比如此例中涉及到区域内多个单元格的等值运算)大多数情况下需要用到数组组合键。 其它还存在运算结果为数组等等不同的情况也需要用到的,请大家关注后续内容!

下面我们来看一下这个公式和对应参数。 ADDRESS(row_num, column_num, abs_num, a1, [sheet_text]) row_num:表示要在单元格引用中使用的行号。 column_num:表示要在单元格引用中使用的列号。 abs_num:表示要返回的引用类型。(1或省略 – 绝对引用,2/3 – 混合引用, 4 – 相对引用) a1:表示返回的单元格地址的引用样式。(0 – B2, 1 – R[2]C[2],可省略) sheet_text:表示指定要用外部引用的工作表的名称。(可省略)

就其本质而且ADDRESS函数就是一个取得地址的函数,至于到底取到什么值的地址,这个值如何查找,可以结合其它函数变化出无尽的组合。

Step 2: 如何进行位置偏移并且得到值?

关键词:OFFSET,INDIRECT 公式: ===OFFSET(INDIRECT(单元格地址), 行偏移值, 列偏移值)==

Offset函数以指定单元格为参照系,通过偏移量来得到新的单元格引用。 同样的我们来看一下这个函数的参数: OFFSET(reference, rows, cols, [height], [width]) reference:表示指定单元格或者单元格区域的引用。 rows:上(下)偏移的行数。 cols:左(右)偏移的列数。 height:表示所要返回的引用区域的行数。(可省略) width:表示所要返回的引用区域的列数。(可省略)

可见OFFSET函数就能满足行列偏移的需求。然而我们通过ADDRESS函数取到的实际上是一个文本。而OFFSET函数第一个参数需要的是一个引用,所以此处引出一个新的函数INDIRECT。 这个函数的基本功能非常简洁,Office官方的描述就是根据文本值返回其引用。(Returns the reference specified by a text string.)

就这个案例而言,品名对应ID,在水平方向偏移了1,垂直方向不变,因此offset(address,0,1)即可。

最终,我们可以根据两步的运算,得到我们想要的结果。

小提示!

当公式复杂或者引用较多的时候,如下图

在公式编辑时选中对应引用,按下F9可以直观的看到对应的值或计算结果:

不选中任何引用/参数对于整个公式F9的话,则可以直接看到该公式的结果: