使用Excel进行个人计划执行记录与统计分析
发布时间:2023-03-01 13:06:52
一转眼,2 19年已至4月,自从年初立下flag后,便努力朝着实现它的方向奔跑。有些执行得很好,比如每天更新 Excel微信,坚持每天学习,而有些则还没有开始。是时候该督促自已全面开始了!于是,制作了一个简单的计划执行情况统计分析表,加上少量的VBA代码,以方便自已每周检视计划的执行情况,提醒自已哪些没做,要赶快补上。
下面,将创建过程与大家分享。有兴趣的朋友可以作为模板,或者与自已的实际情况相结合,稍作修改,用作自已的一个工具。
下所示为我使用的数据记录表,工作表名“个人计划执行记录”,每天晚上睡觉前或者第二天上午上班前,我会将一天的学习生活情况记录在此。
在列G中,使用了“数据验证”功能(即原来的“数据有效性”),可以直接在列表中选择分类,如下所示。
“数据验证”设置如下所示。
其中,“category”是定义的名称,代表下所示工作表“计划执行统计”的单元格区域B7:B21。
在中,单元格C4是统计的起始日期,命名为startDate;单元格D4是统计的结束日期,命名为endDate,这是我们在这个工作表中唯一要输入的两个数值。输入日期后,单击其右侧的“更新”按钮,自动统计这两个日期之间的相应数据。该按钮关联了下文所的用于实现自动统计的VBA程序。
单元格区域C7:D21是输出区域,通过VBA程序自动生成各分类上花费的时间和做的次数。
单元格区域B7:B21除作为上文介绍的分类下拉列表项来源外,还设置了条件格式,如下所示。当统计的次数不符合要求时,相应分类的字体会显示红色。
在VBA代码中,使用了高级筛选功能。工作表“个人计划执行记录”的单元格区域J1:K2是条件区域,关联了工作表“计划执行统计”中输入的起始日期(startDate)和结束日期(endDate)。从单元格M1开始,放置符合筛选条件的数据,如下所示。
代码将筛选出的数据与分类(category)比较,计算相应分类上事项所花的时间及开展的次数,并输入工作表“计划执行统计”中的单元格区域C7:D21。
完整的代码如下:
Sub planstatistics()
‘数据分析汇总工作簿变量
Dim wksStat As Worksheet
‘数据工作簿变量
Dim wksRecord As Worksheet
‘数据区域
Dim rngDatas As Range
‘筛选数据放置的区域
Dim rngFilterData As Range
‘筛选条件区域
Dim rngCriteria As Range
‘循环变量
Dim rng As Range
Dim cell As Range
‘数据区域的最后一行
Dim lngDataLastRow As Long
‘筛选的数据的最后一行
Dim lngFilterLastRow As Long
‘数据分析区域的最后一行
Dim lngLastRow As Long
‘计数变量
Dim lngCount As Long
‘设置工作簿变量
Set wksStat = Worksheets(“计划执行统计”)
Set wksRecord = Worksheets(“个人计划执行记录”)
‘设置被筛选数据所在区域
lngDataLastRow =wksRecord.Range(“A” & Rows.Count).End(xlUp).Row
Set rngDatas =wksRecord.Range(“A1:G” & lngDataLastRow)
‘初始化筛选条件和筛选值放置的区域
With wksRecord
.Range(“J2″) =”>=” & [StartDate]
.Range(“K2″) =”<=” & [EndDate]
.Range(“M1:S” &Rows.Count).Clear
Set rngCriteria =.Range(“J1:K2”)
Set rngFilterData =.Range(“M1”)
End With
‘筛选数据
rngDatas.AdvancedFilterAction:=xlFilterCopy, _
CriteriaRange:=rngCriteria, _
CopyToRange:=rngFilterData
‘获取筛选的数据
lngFilterLastRow =wksRecord.Range(“M” & Rows.Count).End(xlUp).Row
If lngFilterLastRow = 1 Then Exit Sub
‘清除统计表中已有数据
lngLastRow = wksStat.Range(“B”& Rows.Count).End(xlUp).Row
wksStat.Range(“C7:D” &lngLastRow).ClearContents
‘分析数据并将结果输入到数据分析工作簿
For Each rng In [Category]
lngCount =
For Each cell InwksRecord.Range(“S2:S” & lngFilterLastRow)
If rng = cell Then
rng.Offset( , 1) =rng.Offset( , 1) + cell.Offset( , -2)
lngCount = lngCount + 1
End If
Next cell
rng.Offset( , 2) = lngCount
Next rng
End Sub
代码中有很多“硬编码”,例如wksStat.Range(“C7:D” & lngLastRow)和wksRecord.Range(“S2:S” &lngFilterLastRow)中的单元格引用。如果工作表中的分类或列数据有增减,要作相应的修改。
代码的图片版如下:
结语:不必拘束于代码的优雅,也不必在意通用性,只要能够解决问题,快速实现自已的目的,适合自已就行,这就是VBA最大的好处。


猜你喜欢
- win7系统插入光盘,可以快速读取光盘内容,但是就是打不开光盘,这是怎么回事呢?这种情况怎么办呢?本文将提供win7系统光盘打不开的解决方法
- win7系统光驱不读盘自动弹出要怎么办?我们在使用电脑的时候,有些时候会用到光盘设备。但是最近有些小伙伴问我,自己win7电脑在插入光盘的时
- 欢迎观看 After Effects 教程,小编带大家学习 After Effects 的基本工具和使用技巧,了解如何在 AE 中调整关键帧
- XMind是一款强大的思维导入软件,极简设计;是流畅体验;是集强大功能于一身在所有设备上都好用的思维导图、头脑风暴脑图应用。使用XMind做
- 一般情况下,U盘的读写传输速度取决于U盘闪存本身,但其实通过一些系统设置也是可以在一定程度下提高U盘读写传输速度的,如何进行系统设置提高U盘
- 什么是.dps格式1、所谓的.dps格式就是WPS的PPT所保存文件的文件格式。它在办公中经常用到,是一种常见的幻灯片格式。打开dps格式文
- 最近有朋友们遇到“0X0353D580”指令引用的“0X0353D580”内存,提示该内存不能为Read,如何解决这个问题,下面小编就给大家
- 很多用户都有去下载使用windows7 sp1的公开测试版,但是在使用之后却发现Beat版的SP1其实并不完美,而且也不大问题,那么要如何清
- 什么是UCA功能?在Windows系统里,从Windows Vista开始引入了UAC这新技术,UAC(User Account Contr
- 据最新消息称,微软面向广大用户们推送了win10版本2004慢速预览版19041.208,修复了一些常见的问题,主要是为了让用户们更好的使用
- 我们在使用电脑编辑文件的时候,经常会使用到大量的复制粘贴,这样会导致存储空间变大。那就需要清空剪贴板。清空剪切板的方法有很多种,使用命令清空
- AndroidStudio创建文件怎么个文件开头添加注释内容?想让自己创建的文件的开头都有一样的注释,该怎么设置呢?下面我们就来看看详细的设
- wps怎么合并图形?在wps中,用户可以对多张图片进行合并成一张,省去占用的空间,或者优化图形,那具体要怎么操作呢?来看看详细的步骤过程吧。
- win10系统中怎么设置打印纸张的大小?win10系统打印的时候,为了能规范打印,想要提前设置打印纸张的大小,该怎么设置呢》下面我们就来看看
- 在Word文档中怎么快速对齐姓名?如图所示将上方的文档按照下方格式对齐,怎么快速对齐呢? 1.选中文本内容,按下Ctr
- 设置win10系统的过程中,有用户遇到了电脑的设置界面所有的滑块图标都是显示异常的问题。对于这种问题小编觉得可能是电脑的内部组件出现了一些问
- 很多朋友制作了属于自己的条形码后,不知道如何打印?macdown小编为大家带来了如何在Zebra或Dymo打印机上打印条形码?感兴趣的朋友,
- 说起EXCEL大家肯定都不陌生,不管是在求学阶段还是说工作阶段,甚至是在日常的生活中,都有EXCEL存在的身影。掌握EXCEL使用技巧,可以
- win7系统是一款大家用了都说好的系统。最近一直有小伙伴们在问win7宽带连接怎么创建桌面的问题?今天小编就为大家带来了win7宽带连接创建
- win11兼容win10软件吗?在所有微软系统中,win10系统的兼容性是最差的,那么从win10升级上去的win11系统呢?能不能兼容wi