Excel 行间数据的集合运算(交集,并集,差集)

职场办公中,经常会遇到需要将两个或多个表格的数据合并和比对的任务,要将其中重复数据挑出来。这本质上就是常规的集合运算,Excel 不能直接支持,需要用一系列函数配合才能完成,做起来麻烦,也不容易理解。

这里介绍一个好用的插件,可以直接进行集合运算。

这个插件叫做 SPL,它擅长处理各种复杂Excel操作,用它来辅助Excel计算,工作效率秒翻倍。

例如,有一月份和二月份销售额排名前十的产品名称和销售员姓名:

..

..

我们使用 SPL,分别按照关键列和整行数据计算交集、并集、差集。

1. 基于关键列的集合运算

(1)求交集

ProductName为关键列,找出一二月份均进入前十的产品数据(销售员姓名列出一月份的即可)

操作很简单,在空白处输入以下代码:

=spl("=[E(?1),E(?2)].merge@oi(ProductName)",Jan!A1:B11,Feb!A1:B11)

如图

..

然后 ctrl-enter,直接返回结果,得到两个表格产品名称的交集

..

代码解释:=spl() 表示调用 SPL 插件,?1 ?2 表示参与计算的表格,这里分别指Jan!A1:B11Feb!A1:B11ProductName 是指定的关键列,[].merge()表示将[]内的表格合并,符号@后面的字母表示合并的方式, i表示求交集后合并,而o表示认为关键列ProductName是无序的。因此整句代码的意思就表示将一、二月份的表格按照ProductName求交集。

同理,要实现并集和差集,只需要改变@后面的字母选项,就可以实现。

(2)求并集

ProductName为关键列,找出一、二月份有一次以上进入前十的产品数据(销售员姓名列出一月份的即可)

求并集,将@后面的字母改为u即可,代码如下:

=spl("=[E(?1),E(?2)].merge@ou(ProductName)",Jan!A1:B11,Feb!A1:B11)

..

(3) 求差集

找出一月份进了前十但是二月份没有进前十的产品销售数据

求差集用字母d表示

=spl("=[E(?1),E(?2)].merge@od(ProductName)",Jan!A1:C11,Feb!B1: B11)

..

如果有两个或多个关键列,直接在小括号里添加即可,例如按照ProductNameName两个字段求交集合并,就是merge@oi(ProductName,Name)

当然merge函数还能实现按整行数据是否相同进行合并,只需去掉括号里的字段名即可,例如下面的例题2

2. 基于整行数据的集合运算

(1)求交集

找出一二月份均进入前十的产品及销售员的数据

=spl("=[E(?1),E(?2)].merge@oi()",Jan!A1:B11,Feb!A1:B11)

..

(2)求并集

找出有一次以上进入前十的产品及销售员的数据

=spl("=[E(?1),E(?2)].merge@ou()",Jan!A1:B11,Feb!A1:B11)

..

(3)求差集

找出一月份进了前十但是二月份没有进前十的产品及销售员的数据

=spl("=[E(?1),E(?2)].merge@od()",Jan!A1:B11,Feb!A1:B11)

..

3. 多个表格的集合运算

有时也会遇到多个表格合并和比对的情况,例如有多个月份的销售数据top10Sales.xlsx,并且随着时间的推移,月数还会增加。

..

现需要对多个月份的数据进行集合运算,当然也可以继续采用上面例题中 [E(?1),E(?2),E(?3),……].merge() 的写法,但是当表格较多时写起来还是有些麻烦,这时我们可以在 SPL 的 ide 里进行操作效率会更高。

(1)多个表格求交集

找出这几个月全部进了前十的产品名单

在 ide 中输入以下代码:


A

1

=file("top10Sales.xlsx").xlsopen()

2

=A1.(A1.xlsimport@t(;stname)).merge@oi(ProductName)

A1 表示读取 Excel 文件,返回文件中所有 sheet 页的名字,行数和列数

..

A2 根据页名 stname,打开所有 sheet 里的数据,然后求交集

..

同理,可以求并集和差集

(2)求并集

找出有一次以上进了前十的产品名单:


A

1

=file("top10Sales.xlsx").xlsopen()

2

=A1.(A1.xlsimport@t(;stname)).merge@ou(ProductName)

..

(3) 求差集

找出一月份进了前十但是其它月份均没有进前十的产品名单:


A

1

=file("top10Sales.xlsx").xlsopen()

2

=A1.(A1.xlsimport@t(;stname)).merge@od(ProductName)

..

在 Excel 复杂的集合运算,借助 SPL,一个 merge() 函数就可搞定!!!

在 SPL 里还有很多灵活的数据处理函数,能够处理各种复杂Excel操作,写法也简单,非常好用。

并且 SPL 还配套有丰富的参考案例esProc 桌面版与 Excel 处理, 职场上 90% Excel 问题都能在这本书中找到答案。书中的代码基本上复制过去,稍加改改就可使用。

插件下载地址:» esProc Desktop Download

安装方法:SPL XLL 安装与配置