lookup函数处理合并单元格套路

deer332025-06-10技术文章36

知乎原题是:

如何将两个EXCEL表中数据做对比找出差异?

1.首先两个excel表来自不同的两个人做的同样的业务。

2.表格中存在合并单元格的问题,所以难以利用vlookup函数。

3.两个表中虽然对象数据都会存在,但是数据顺序不一定一样。

因为有日文,所以我重新模拟了一下数据来回答。

此题关键是合并单元格的处理,这里利用lookup查找末行数据来匹配空单元格内容。

声明,我也只对函数有些了解,所以从函数角度来解决此问题;此文仅说明处理合并单元格的一个套路,不一定最优解。

一、通过lookup确定查询值

这是套路,请牢记!

=LOOKUP("座",$A$3:$A3)

公式简析:

1、我们要知道,在excel中,汉字排序默认是按照拼音的顺序排列的,“座”的拼音是zuo,在字典里是很靠后的一个字,所以一般在查找汉字最后一行的内容时,多用“座”为参数。

2、lookup第二参数的锁定$A$3:$A3,这种写法也经常用到,此种写法是将区域的开始单元格锁定,目的是随着向下或者向右拖动公式时,保证lookup第二参数(查询区域)的开始位置不变;结束单元格只锁定了列而没有锁定行,目的是随着公式的拖动,查找区域是逐渐扩大的。

这点对于初学者来说是个难点,一定要亲自写一写,拖一拖,体会参数变化规律。

但为了防备表一B列(姓名列)与表一B列(姓名列)不一致,我们再连接B列内容,形成一个包含班级与姓名的唯一值

=LOOKUP("座",$A$3:$A3)&$B3

有了这个唯一值,就可以去另外一个表里查找对应数据了。

二、通过lookup确定查询区域

作为查询值,可以一个格子为一个值,但作为查询区域,就要是一个内存数组了,所以虽然原理相同,但实现方法上有些变化:

1、通过判断合并单元格是否为空来确定行数

=IF($A$15:$A$22>0,ROW($1:$8))

按F9查看公式结果

通过上图我们可以看出,在表二数据(除去表头)中,第1、2、3、6行是有内容的。

2、用lookup确定各行要取哪一行对应的数据

=LOOKUP(ROW($1:$8),IF($A$15:$A$22>0,ROW($1:$8)))

按F9查看公式结果:

3、为各行匹配班级数据

可能好多同学看到上图的结果,想到的是用indext去表二里引用相应的数据,其实不用。因为lookup还有第三参数。

=LOOKUP(ROW($1:$8),IF($A$15:$A$22>0,ROW($1:$8)),$A$15:$A$22)

按F9查看公式结果:

通过上图我们可以看出,这个结果与查询值结果很相似,但查询结果是一个一个的数值,这里是多个值,也就是数组。

4、连接姓名列

=LOOKUP(ROW($1:$8),IF($A$15:$A$22>0,ROW($1:$8)),$A$15:$A$22)&$B$15:$B$22

三、match确定引用表二数据行号

=MATCH(LOOKUP("座",$A$3:$A3)&$B3,LOOKUP(ROW($1:$8),IF($A$15:$A$22>0,ROW($1:$8)),$A$15:$A$22)&$B$15:$B$22,0)

上图中,出现#na错误,是因为表二中四班、三班姓名模拟数据错误,与表一没有一一对应。鉴于本文只为说明套路,所以也就不再修改。

四、index引用数据

=INDEX($C$15:$E$22,MATCH(LOOKUP("座",$A$3:$A3)&$B3,LOOKUP(ROW($1:$8),IF($A$15:$A$22>0,ROW($1:$8)),$A$15:$A$22)&$B$15:$B$22,0),COLUMN(A1))

将表二的数据对应引用到表一,下一步就可以进行对比了,余下的工作,请自行完善,不再赘述!

当然,表二如果是另外一个工作表,无非是函数写得更长一点,路子上没有什么区别。