办公问答网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 71|回复: 1

Excel按条件汇总,大师我悟了!

[复制链接]

4

主题

7

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2023-1-12 13:03:00 | 显示全部楼层 |阅读模式
按条件汇总是非常常见的需求,比如函数SUMIFS、数据透视表、PQ等Table.Grop等,那么VBA按条件要如何实现汇总呢?
今天,小编就要带大家彻底搞懂,所谓的“棋盘法”汇总!(附件文末下载)
▍单列汇总
比如下面这样的数据,需要按照姓名汇总金额,要如何处理?只有一列需要汇总,比较简单,直接使用字典即可!



那么非常简单,我们逐个姓名处理,把出现的姓名加入到一个容器中,下每次如果发现已经在其中就把对应的数量取出来,再加上本次的数量放进去就可以的。
用图来解析,大概就是这样



那么到代码部分要如何写呢?我们用数组装数据提高速度,字典来记录内容
▼代码注释已经非常的详细



那么如果我们要汇总多列呢?你想一想,字典好像只有1对1关系,多列好像无法放入到他的ITEM中去!那么要如何处理呢?
▍多列汇总
上面汇总有一个非常核心的东西:利用字典,找到之前已经加入对应的内容!如果我们把现在的内容修改为位置的话!
姓名第一次出现,1,每次出现新的姓名,序号都加1,如果出现过之前出现过的,我们就取出记录的位置,有了位置,我们就可以实现累加了
我们多加一列金额,我们也要同时对金额汇总
那么处理思路如下:(点击查看大图)



具体代码如何实现呢?前两天分享的那个查询有点BUG,所以我们这一次好好给大家总结一下!
▼下面是标准的棋盘法写法



结果如图:(旁边为累加示意)



上面的是标准的思路,但是其中我们还有优化的空间,其实不管是第一次出现还是第二次或者更多,我们的金额都可以理解为累加,无非第一次是0+当前值,以后是累加的结果+当前值,所以在第一次出现的姓名时,只需要写入非汇总列的值,比如姓名,汇总统一放到下面,必执行的过程!
简化后如下:关注红圈部分的优化处理



值得注意的是,不要省变量,对应的位置和n(累加器)公用,否则就会出现我上次挖的坑!
上次已经下载模板的同学,学完今天的教程,自己去改改模板,把坑补上吧!



写的这么辛苦,下面为大家提供本文附件,仅供参考,当然自己的教程还是要宣传一波的!
VBA0基础从入门到精通系列教程,小编无数个日夜,逐字码出来的良心教程,提供源码+附件,全程毫无保留专业指导+直播讲解疑难问题!
---点击加入--欢迎加入学习大军---点击加入--





附件下载:https://share.weiyun.com/Vrc8xrDf
回复

使用道具 举报

1

主题

8

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2025-6-15 04:38:21 | 显示全部楼层
呵呵,低调,低调!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|办公问答网

GMT+8, 2025-7-4 09:45 , Processed in 0.107038 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Templated By 【未来科技 www.veikei.com】设计

快速回复 返回顶部 返回列表