1、我们先来看一下分表结构图吧
2、为了方便大家看结构,我把日期所在单元格L2 和数据最未行24行标记上了颜色,每个表都是这样的格式,数据录入也不规范,以A列员工ID为列,有很多空的,空的是谁呢??有过数据录入经验的人都能猜到,这里就不说了。再来看设计好的汇总表《总资》的结构吧。
3、因为列太多,我隐藏了一些没数据的列,知道了数据结构和汇总样式,就开始写代码吧,这次的代码有点多,咱就不费话了,后面会对思路进行讲解,这里先照图抄秘籍吧。
4、注意,代码是写在加载宏里的哟,加载宏怎么做的?看上次的分享吧!代码写好以后,将此功能添加到功能区,然后,激活《总资》表,点92爱知趣助手,再点 一键汇总分表数据 ,就好啦!
5、个人建议 整体操作流程如下。
6、接下来是代码思路解析时间,各位同学可要坐稳扶好,摔到了我不负责的。1、 功能限定:因为是加载宏,打开Excel就能使用,所以为了防止误操作造成不必要的损失,使用了 If ActiveSheet.Name <> "总资" Then Exit Sub 语句限定只能激活 总资表的时候才能使用此功能。
7、计算写入列:从分表的 L2 单元格中提取 天数 用来确定数据要写入哪一列(取巧·)iCol = Day(.Range("L2").Value) + 1 为什么要加1呢?想一想!!
8、PS:这里有两个隐式Bug,第一个,如果分表中 L2没日期(或者不是日期),将会出错第二个,如果第一张工作表不是总资表,也会出错。这是我故意留里面的,给大家当作扩展练习,修复它们,你就更进一步了。
9、 计算写入行:Range.Find 用来查找数据,存在时可以确定汇总时需要在哪一行,不存在时就查最后一行数据,用来新增数据。
10、 数据累加汇总:行位置iRow用range.find找到了,列位置iCol通过提取日期中的天数来确定,用Cells来汇总就简单啦,Cells(iRow, iCol).Value = Cells(iRow, iCol).Value + .Cells(xRow, "N").Value
11、个人建议 上面用的都是最基础的代码,所以效率并不高(也比函数高),想要继续深入的同学可以用字典加数组来提高运行效率。