Excel 高级分类汇总方法

数据的分类汇总是工作时经常遇到问题,如果是简单的求和,求均值,计数等需求,直接用 Excel 的分类汇总或数据透视表就可以实现。但是遇到复杂一些的需求就没法实现或者很难实现了,比如对于分类后的数据,按照分类汇总值再进行过滤与排序或者是计算每组内的排名等。并且Excel的分类汇总操作也不够灵活,比如如何将汇总项复制提取出来,并且自动更新;如何将分类汇总后的每一类数据分别写入到一个新的Excel表等等,很多时候操作了半天也很难实现自己想要的效果。

这里我们整理了几种经常会遇到的Excel分类汇总例题,手把手教大家如何解决。

首先需要在Excel里安装一个插件SPL,安装方法见文末。

SPLPython类似,能够处理各种复杂 Excel 操作,但是写法比Python要简单。用 SPL 来辅助 Excel 计算,工作效率秒翻倍。

比如,有不同班级,数学、英语和体育成绩如下:

..

我们对该数据进行几种不同方式汇总

例 1:简单多列分类汇总

统计每个班的总人数、总分平均分如下图

..

第 1 个小问题统计每个班的总人数在 Excel 里直接分类汇总计数就可以实现很方便;而第 2 个小问题汇总时需要引用多列参与计算的情况,在 Excel 就麻烦些(总分 =Math+English+PE),需要先添加一列计算出每个人的总分,然后对总分进行分类汇总平均分。在 Excel 里完成后效果如下图。

..

调用 SPL 插件函数就比较直接,可以直接在原始数据上同时汇总,一步完成。

操作方法很简单,在 Excel空白单元格里输入代码:

=spl("=E(?).groups(Class;count(~):TotalNumber,avg(Math+English+PE):AverageScore)",A1:E11)

..

然后按 ctrl-Enter 键,返回汇总结果

..

代码解释,如字面意思,groups()表示分组聚合,按照 Class 分组,分组计算分号后面的汇总项。count() 是计数函数,avg() 是求均值。E? 表示需要汇总计算的表格范围,本例中指 A1:E11

当汇总项较少时,两种方法复杂度差不多,而当汇总项比较多或者涉及引用多列的汇总计算较多时,使用 SPL 就比较合适。

使用 SPL 返回的结果还有一个好处就是可以直接提取出汇总结果,并且提取出来的结果当源数据发生变化时,可以自动更新。

例 2:数据分类后,筛选,排序再汇总

统计每个班数学 90 分以上的人数、英语不及格的人数、去掉一个最高分去掉一个最低分后的体育平均分

这几个问题都涉及到先将数据按班级分组,然后在组内筛选汇总。

Excel里数据透视表是同时具备筛选和分类汇总的功能,但是它难以实现本例。首先它的规则是先筛选后分类,无法实现组内数据筛选,比如每个组内的最高分和最低分这种问题是无法实现的。

并且在数据透视表里对多列的筛选逻辑是与的关系,比如统计每个班数学90分以上的人数和英语不及格的人数,如果在同一个数据透视表里操作筛选出来的是数学90以上并且还英语不及格的人数,需要在两个数据透视表里分别操作才能实现。操作麻烦还容易出错。

而借助SPL函数,问题就简单多了,用一个分组函数group(),就可以实现组内筛选和排序,具体代码如下:

=spl("=E(?).group(Class;~.count(Math>=90):MathAbove90,~.count(English<60):EnglishFailed,~.(PE).sort().m(2:-2).avg():PEAvg)",A1:E11)..

group()是分组函数,按照 Class 分组,然后分别筛选每个组内满足条件的行进行汇总。sort() 排序函数,m(2:-2) 表示从第二个成员取到倒数第二个成员。~.(PE).sort().m(2:-2).avg() 表示对每个班级的体育成绩排序从第二个成员取到倒数第二个,然后求均值。

例 3:分类汇总后,每一类生成一个单独的 sheet 页

把表格里的成绩按班级分类汇总,汇总出每一科的总分,然后每个班生成一个单独的 sheet 页,如图效果

..

在 Excel 里汇总容易,但是要分别写到新的表格就得手工一个个复制粘贴,太麻烦不可取

直接在 SPL 的 IDE 里操作更方便,代码如下


A

1

=T("D:/Score.xlsx")

2

=A1.group(Class;~.array()|[["Total",,~.sum(Math),~.sum(English),~.sum(PE)]]:a)

3

=A2.(a.record())

4

=A3.(file("D:/Score.xlsx").xlsexport@kt(~;~.Class))

A2 按照班级分组,汇总每个科目总分添加到班级的最后一行

A3 获取汇总后每个班级的成绩表格

A4 将每个班的成绩分别写入新的 sheet 页

对于分类汇总问题,如果是对某列或某几列的直接汇总(求和,平均值,计数等)用 Excel 的分类汇总或是 SPL 都很方便,如果复杂些的问题或者需要将汇总结果提取出来的情况用 SPL 则更合适。并且 SPL 的写法简单,符合人的自然逻辑思维方式(如统计数学 90 分以上的人数就是 count(Math>=90)), 学起来比较容易。

使用 SPL 插件汇总和提取数据简单方便,而且效率高,并且还有配套丰富的 Excel 操作案例可以参考:esProc 桌面版与 Excel 处理,帮你轻松搞定职场中的各种 Excel 难题。

SPL 下载地址:» esProc Desktop Download

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