转眼间,2月19日已经到了4月。自从年初立了旗,我们就努力往实现的方向跑。有的表现不错,比如每天更新Excel微信,坚持每天学习,有的还没开始。是时候督促自己全面出发了!于是做了一个简单的计划执行情况统计分析表,加了少量的VBA码,方便自己每周检查计划执行情况,提醒自己没有做的事情,赶紧补上。
接下来,我们将与您分享创作过程。感兴趣的朋友可以作为模板,或者结合自己的实际情况,稍加修改,作为自己的工具之一。
下面是我用的数据记录表,名字叫“个人计划执行记录”。每天晚上睡觉前或者第二天早上上班前,我都会在这里记录我的学习和生活。
g列使用“数据有效性”功能(即原来的“数据有效性”),分类可以直接从列表中选择,如下图所示。
数据验证设置如下。
其中,“类别”是定义的名称,表示工作表“计划执行统计”的单元格区域B7:B21,如下所示。
在中,单元格C4是统计的开始日期,称为开始日期;单元格D4是统计数据的结束日期,称为结束日期,这是我们在此工作表中需要输入的唯一两个数值。输入日期后,点击右侧的“更新”按钮,自动统计两个日期之间的对应数据。该按钮与VBA自动统计程序相关联,如下所述。
单元格区域C7:D21为输出区域,每次分类花费的时间和做的次数由VBA程序自动生成。
单元格区域B7:B21不仅作为上述类别下拉列表项的来源,还设置了条件格式,如下图所示。当统计的次数不符合要求时,对应的分类字体会显示红色。
在VBA代码中,使用了高级过滤功能。工作表“个人计划执行记录”的单元格区域J1:K2是条件区域,与工作表“计划执行统计”中输入的开始日期和结束日期相关联。从M1单元开始,放置符合过滤标准的数据,如下所示。
将过滤后的数据与类别进行比较,计算相应类别中的项目花费的时间和执行的次数,并输入工作表“计划执行统计”中的单元格区域C7:D21。
完整的代码如下:
子计划统计()
数据分析汇总工作簿变量。
将工作周设为工作表
数据工作簿变量。
将工作周记录为工作表
数据区。
变暗数据作为范围
过滤放置数据的区域。
将rngFilterData调暗为范围
过滤条件区域。
将rngCriteria调暗为范围
“循环变量”
调光范围
将单元格调暗为范围
数据区的最后一行。
暗淡无光
过滤数据的最后一行。
暗淡无光
数据分析区域的最后一行。
昏暗的灯光和长长的一样
计数变量。
暗淡无光
设置工作簿变量。
设置wksStat=工作表(“计划执行统计”)。
设置工作记录=工作表(“个人计划执行记录”)。
设置过滤数据所在的区域。
lngDataLastRow=wksRecord。范围(“一”行。计数)。结束(xlUp)。排
设置rngDatas=wksRecord。范围(“a 1:g”lngDataLastRow)
初始化筛选条件和放置筛选值的区域。
带wksRecord。范围(“J2”)="="[开始日期]。范围(“K2”)="="[结束日期]。范围(“M1:S”行。计数)。清楚的
设置rngCriteria=。范围(“J1:K2”)
设置rngFilterData=。范围(“M1”)
以…结尾
过滤数据。
rngDatas。advancedfilteraction :=xlFilterCopy,_
标准范围:=rngCriteria,_
CopyToRange:=rngFilterData
获取过滤后的数据。
lngFilterLastRow=wksRecord。范围(“M”行)。计数)。结束(xlUp)。排
如果lngFilterLastRow=1,则退出Sub
清除统计表中的现有数据。
lngLastRow=wksStat。范围(“B”行)。计数)。结束(xlUp)。排
wksStat。范围(“c 7:d”lngLastRow)。ClearContents
分析数据并将结果输入数据分析工作簿。
对于[类别]中的每个rng
lngCount=
对于中的每个单元格,记录。范围(“s 323360s”lngfiltrlastrow)
如果rng=cell那么
rng。偏移量(,1)=rng。偏移量(,1)单元格。偏移量(,-2)
lngCount=lngCount 1
如果…就会结束
下一个单元格
rng。偏移(,2)=lngCount
下一个rng
末端接头
代码中有许多“硬代码”,例如wks stat . range(“c 7:d”LNG strow)和wks record . range(“s :s”lngfiltrlastrow)中的单元格引用。如果工作表中的分类或列数据有任何增加或减少,则应进行相应的修改。
代码的图片版本如下:
结论:你不必被代码的优雅所约束,也不必在意通用性。只要能解决问题,迅速达到自己的目的并适合自己,这就是VBA最大的好处。