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:B11和Feb!A1:B11。ProductName 是指定的关键列,[].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)
如果有两个或多个关键列,直接在小括号里添加即可,例如按照ProductName和Name两个字段求交集合并,就是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 安装与配置
英文版
演示数据:Excelrar