前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Excel应用实践03:使用Excel进行个人计划执行记录与统计分析

Excel应用实践03:使用Excel进行个人计划执行记录与统计分析

作者头像
fanjy
发布于 2019-07-19 02:26:15
发布于 2019-07-19 02:26:15
2K0
举报
文章被收录于专栏:完美Excel完美Excel

学习Excel技术,关注微信公众号:

excelperfect

一转眼,2019年已至4月,自从年初立下flag后,便努力朝着实现它的方向奔跑。有些执行得很好,比如每天更新完美Excel微信公众号,坚持每天学习,而有些则还没有开始。是时候该督促自已全面开始了!于是,制作了一个简单的计划执行情况统计分析表,加上少量的VBA代码,以方便自已每周检视计划的执行情况,提醒自已哪些没做,要赶快补上。

下面,将创建过程与大家分享。有兴趣的朋友可以作为模板,或者与自已的实际情况相结合,稍作修改,用作自已的一个工具。

下图1所示为我使用的数据记录表,工作表名“个人计划执行记录”,每天晚上睡觉前或者第二天上午上班前,我会将一天的学习生活情况记录在此。

图1

在列G中,使用了“数据验证”功能(即原来的“数据有效性”),可以直接在列表中选择分类,如下图2所示。

图2

“数据验证”设置如下图3所示。

图3

其中,“category”是定义的名称,代表下图4所示工作表“计划执行统计”的单元格区域B7:B21。

图4

在图4中,单元格C4是统计的起始日期,命名为startDate;单元格D4是统计的结束日期,命名为endDate,这是我们在这个工作表中唯一要输入的两个数值。输入日期后,单击其右侧的“更新”按钮,自动统计这两个日期之间的相应数据。该按钮关联了下文所讲的用于实现自动统计的VBA程序。

单元格区域C7:D21是输出区域,通过VBA程序自动生成各分类上花费的时间和做的次数。

单元格区域B7:B21除作为上文介绍的分类下拉列表项来源外,还设置了条件格式,如下图5所示。当统计的次数不符合要求时,相应分类的字体会显示红色。

图5

在VBA代码中,使用了高级筛选功能。工作表“个人计划执行记录”的单元格区域J1:K2是条件区域,关联了工作表“计划执行统计”中输入的起始日期(startDate)和结束日期(endDate)。从单元格M1开始,放置符合筛选条件的数据,如下图6所示。

图6

代码将筛选出的数据与分类(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 = 0

For Each cell InwksRecord.Range("S2:S" & lngFilterLastRow)

If rng = cell Then

rng.Offset(0, 1) =rng.Offset(0, 1) + cell.Offset(0, -2)

lngCount = lngCount + 1

End If

Next cell

rng.Offset(0, 2) = lngCount

Next rng

End Sub

代码中有很多“硬编码”,例如wksStat.Range("C7:D" & lngLastRow)和wksRecord.Range("S2:S" &lngFilterLastRow)中的单元格引用。如果工作表中的分类或列数据有增减,要作相应的修改。

代码的图片版如下:

结语:不必拘束于代码的优雅,也不必在意通用性,只要能够解决问题,快速实现自已的目的,适合自已就行,这就是VBA最大的好处。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Excel应用实践06:进行多条件统计
这是在知乎上看到的一个问题,我试着用VBA来解决。欢迎大家就自已使用Excel中遇到的问题或想要的解决方案提问,我将尽力解答。
fanjy
2019/07/19
9750
Excel应用实践24: 实现完美Excel公众号文章推送记录
研究和分享Excel知识和技术是自已的一项业余爱好,自已平时主要花的时间还是在工作上,毕竟这是自已的饭碗。说实在的,工作确实很忙,想要上班时“偷”点时间来写Excel文章的机会很小,因此都是晚上或者周末来准备要发表的文章,这样才能实现每日的分享。
fanjy
2020/01/14
1.1K0
Excel应用实践24: 实现完美Excel公众号文章推送记录
Excel应用实践22: 比较并合并工作表
有两个工作表,均含有相同的数据,但最后一列名称和产品的数量不同,如下图1和图2所示。
fanjy
2019/10/22
7750
Excel应用实践22: 比较并合并工作表
社群答疑精选03:拆分数据到新工作表
这种问题最适合使用VBA来解决。仔细观察后发现,户主对应的人数就是该户家庭在工作表中所占的行数,这样只要定位到户主,就知道了该户所有成员的范围,这就方便提取相应的数据了。VBA代码如下:
fanjy
2020/08/11
5670
社群答疑精选03:拆分数据到新工作表
VBA:利用高级筛选自动筛选列表
这是thesmallman.com上的一个示例,利用VBA、高级筛选和公式进行数据筛选。
fanjy
2022/11/16
2.4K0
VBA:利用高级筛选自动筛选列表
Excel应用实践11:合并多个工作簿中的数据——示例2
在上一篇文章《Excel应用实践10:合并多个工作簿中的数据》中,我们使用代码快速合并超过50个Excel工作簿文件,然而,如果要合并的工作簿中工作表的名称不相同,但位于每个工作簿的第1个工作表;并且,要在合并后的工作表的第1列中输入相对应的工作簿文件名,以便知道合并后的数据来自哪个工作簿文件。
fanjy
2019/07/19
2.9K0
Excel应用实践19:根据工作表某列中的值从另一工作簿中获取数据
在下图1所示的工作簿Data.xlsx的工作表Sheet1中,存放着待使用的数据。
fanjy
2019/08/27
20.6K0
Excel应用实践19:根据工作表某列中的值从另一工作簿中获取数据
VBA应用技巧:使用VBA快速隐藏工作表行
使用Excel VBA隐藏行的简单方法是使用联合区域。通常,如果要使用VBA快速隐藏行,可以选择自动筛选工具,使用一行代码可快速隐藏数千行。然而,如果需要在同一区域内为其他目的使用自动筛选,那就必须单独处理每个单元格。如果了解VBA,当程序必须在多个单元格上循环时,它可能会较慢,尤其是在每次迭代后需要执行操作时。
fanjy
2022/11/16
4.5K0
VBA应用技巧:使用VBA快速隐藏工作表行
VBA代码应用示例:基于时间筛选数据
在筛选数据时,通常是筛选满足特定条件或者介于两个条件之间的信息,例如基于多个条件的筛选或者筛选两个日期之间的数据。然而,总是会遇到一些特殊情形,例如,单元格中包含有日期和时间,如果单元格中的时间大于指定的时间,就获取该单元格所在行的数据。这就是本文要解决的问题。
fanjy
2022/11/16
1.4K0
问与答73: 如何实现录入后自动更新数据?
Q:我有两个工作表,分别是“表1”和“表2”,如下图1和图2所示。每天我打开工作簿后,在“表1”中的单元格C2中录入数据,这个数据会自动更新到“表2”与对应的日期相应的单元格中,其中“表1”中单元格A2我设置了公式=TODAY(),以便每天打开工作簿时,自动更新日期。
fanjy
2020/01/14
1.5K0
问与答73: 如何实现录入后自动更新数据?
仿Excel的撤销功能
这是在www.vbaexpress.com中看到的一个示例,实现了自己以前想做而未做的事情。
fanjy
2024/05/13
2500
仿Excel的撤销功能
Excel应用实践14:合并多个工作簿中的数据—示例3
要合并工作簿的情形有许多种,但最终的目的只有一条,将繁锁的手工操作自动化,让程序快速帮助我们完成这些重复的工作。
fanjy
2019/07/19
1.7K0
Excel应用实践20:使用Excel中的数据自动填写Word表格
我想将这些数据逐行自动输入到Word文档的表格中并分别自动保存,Word文档表格如下图2所示,文档名为“datafromexcel.docx”。
fanjy
2019/08/30
7.6K3
使用VBA合并工作表
从多个Excel工作表(子工作表)中获取信息,并用子工作表中的所有数据填充汇总工作表(父工作表),这是很多朋友会提到的常见要求。如果部分数据是从添加新工作表到工作簿中而增长的,那么获得这些数据的汇总非常方便,例如,添加单独的工作表,包含新月份的数据。
fanjy
2022/11/16
2.1K0
使用VBA合并工作表
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
46.8K0
Excel VBA编程
VBA实战技巧01: 在代码中引用动态调整单元格区域的5种方法
在VBA代码中,经常要引用单元格数据区域并对其进行操作。然而,如果对数据区域采用“硬编码”地址,那么当该区域大小变化时,必须修改相应的引用该区域的代码。本文整理了可以动态引用数据区域的5种方法,供编写代码时参考。
fanjy
2020/02/12
5K0
Excel VBA 自动填充空白并合并相同值的解决方案
在Excel中经常会遇到这样的数据处理需求:一列数据中存在多个空白单元格,需要用其上方最近的非空值填充,然后将相同的连续值合并成一个单元格。比如:
洛秋_
2024/12/31
3780
VBA专题02:使用代码进行复制操作
在Excel工作表中,复制粘贴是最常用的操作之一。在已经输入的数据中,找到并复制想要的数据,然后粘贴到指定的地方,是再自然不过的操作了。或者从工作表的一个单元格区域复制到同一工作表中另外的单元格区域,或者从工作表的一个单元格区域复制到另一工作表中的单元格区域,甚至从工作表的一个单元格区域复制到不同工作簿中的工作表单元格区域。那么,如何使用VBA代码来实现复制粘贴操作呢?本文将介绍常用的一些代码。
fanjy
2019/07/19
6.9K0
EXCEL VBA语句集300
        定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  Option Compare Text ‘字符串不区分大小写  Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能  工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) ActiveWorkbook.name ‘返回活动工作薄的名称 (14) ThisWorkbook.Name ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化  工作表 (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后 (23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向 (31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.Le
Tony老师
2020/03/05
2.3K0
使用VBA自动更改Excel打印区域
在Excel中,将打印区域设置在移动单元格区域内可能是比较困难的事。你可能希望捕捉特定单元格区域为打印区域,或者让打印区域仅考虑某些列。假设在Excel工作簿中有几个辅助列,不希望打印这些列,但希望这些列可见。可以手动设置打印区域以排除非打印区域,但现在已经添加了更多数据,并且希望以同样的方式更新打印区域。
fanjy
2022/11/16
2.3K0
推荐阅读
相关推荐
Excel应用实践06:进行多条件统计
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档