
如图,工作表中有2个表格:系统库存数量表和实际盘点数量表,2个表行数不一致,但都有3列分别为商品信息、规格、数量,现在要将这2个表格的商品信息和规格提取出来,并分析库存数量与实际数量的差异,完成第3个表格:核对数量差异表。
下面介绍两种方法。
方法一、使用vstack、unique和filter函数
在核对数量差异表的差异列前插入2列,列名分别为:系统库存数量和实际盘点数量。

方法一的思路就是先用vstack和unique函数整理出商品信息和规格,再用filter函数匹配数量,最终得出差异。
step1.用vstack和unique函数整理出2个表格的商品信息和规格
(关于vstack和unique函数的使用前面有专门讲解Excel|怎么合并2个表格的信息并去重?,这里直接使用)
在K3单元格内输入=UNIQUE(VSTACK(A3:B11,F3:G9)),回车即可

step2.用filter函数将2个表里的数据筛选匹配过来
(一)从系统库存数量表中匹配系统库存数量
在M1单元格内输入=FILTER($C$3:$C$11,($A$3:$A$11=K3)*($B$3:$B$11=L3),0)
公式内参数意思分别为:
参数1、$C$3:$C$11:表示从哪里筛选数据,从系统库存数量表中的系统库存数量里取数。
参数2、($A$3:$A$11=K3)*($B$3:$B$11=L3):表示筛选条件,这里有2个条件:
条件1:$A$3:$A$11=K3,从$A$3:$A$11中筛选出和K3一样的商品信息,
条件2:$B$3:$B$11=L3,从$B$3:$B$11中筛选出和L3一样的规格,
将条件1和条件2用“*”相连,表示需要同时满足条件1和条件2。
参数3、0,表示根据筛选条件没有匹配到值时,返回0
结果如下。

注意:公式内的区域都用“$”,表示将区域固定住,防止在下拉公式时出现区域错位
(二)从实际盘点数量表中匹配实际盘点数量
与(一)公式类似,在N3单元格内输入=FILTER($H$3:$H$9,($F$3:$F$9=K3)*($G$3:$G$9=L3),0)
结果如下。

Step3.对系统库存数量和实际盘点数量作差,即可得出数量差异

方法二、使用groupby函数
Groupby是一个分类汇总函数,使用思路是:按什么分类,统计什么,怎么统计(求和还是均值等等)。
在K3单元格内输入=GROUPBY(VSTACK(A3:B11,F3:G9),VSTACK(C3:C11,-H3:H9),SUM),公式内参数意思分别为:
参数1、VSTACK(A3:B11,F3:G9):表示按什么分类,按商品信息和规格分类,将所有需要核对的“商品+规格”组合先列在一起。
A3:B11为系统库存数量表中的商品+规格
F3:G9为实际盘点数量表中的商品+规格
参数2、VSTACK(C3:C11,-H3:H9):表示统计什么,将系统数量(正数)与盘点数量的负数堆叠成一列,统计的是系统数量与盘点数量之间的差异。
参数3、Sum:表示怎么统计,结合第2个参数,就是将系统数量+(-盘点数量)=系统数量−盘点数量。
总的来说,GROUPBY函数表示:按第一参数(商品+规格)分组,对第二参数(正负混合的数量)进行SUM。
结果如下。在K3单元格内输入一个公式,就可以得出3列数据。
