工作中经常需要用到excel,有时候会统计和计算大量数据,如果用人工来做会耗时耗力,而且容易出错。如果使用excel的公式,稍微复杂一点的需求就没办法实现。

excel支持VBA编程,所以用程序来实现一些复杂的需求,看起来是个不错的选择。

这里以一个具体的需求来讲解VBA编程

有一个原始数据,里面记录了每一个问题由谁处理的,耗时多少。这些问题,有一些是直接由某人处理,有一些是多个人处理过。要求是统计每个人直接处理了多少问题,参与处理了多少问题,花费了多少时间,并计算平均处理一个问题需要多少时间

先在打开的excel界面,按ALT+F11,呼出VBA编辑器。按照下图方式插入模块,在模块上双击,便可以开始编辑代码

首先要定义一个函数,所有的逻辑都在函数里面实现

Sub test()
....
End Sub

如上,定义了函数test,所有的逻辑就在Sub和End Sub之间实现

接着要定义一些变量

Dim MantisRow As Integer
Dim Name As String
Dim ResolvedMantisNum As Integer
Dim ModifyMantisNum As Integer
Dim ResolvedMantisTime As Single
Dim ModifyMantisTime As Single
Dim ResolvedMantis As Boolean
Dim SummaryRow As Integer

MantisRow表示原始数据的一行

Resolve开头的变量,表示直接解决的问题

Modify开头的变量,表示参与解决的问题

接着,我要sheet2中原有的数据清除,sheet2就是用于填充统计和计算后的数据

Sheets("Sheet2").Range("B2:G11").ClearContents

下面这整个一大段,就是逻辑实现了

' 从sheet2中拿出人名与sheet1中比对
For SummaryRow = 2 To Sheets("Sheet2").Cells(65536, 1).End(xlUp).RowName = Sheets("Sheet2").Cells(SummaryRow, 1)ResolvedMantisNum = 0ModifyMantisNum = 0ResolvedMantisTime = 0ModifyMantisTime = 0' Sheets("Sheet1").Cells(65536, "G").End(xlUp).Row 通过G列来判断总行数,因为第一列会有空行的情况导致数据不准For MantisRow = 2 To Sheets("Sheet1").Cells(65536, "G").End(xlUp).RowIf Sheets("Sheet1").Cells(MantisRow, 1) <> "" Then ' 如果第一列取出来的是mantisID,接着对人名,如果匹配,那么这个mantis就是被他resolved的ResolvedMantis = FalseIf Sheets("Sheet1").Cells(MantisRow, "C") = Name ThenResolvedMantisNum = ResolvedMantisNum + 1ResolvedMantis = TrueEnd IfElse ' 如果第一列取出来的是空值,那根据ResolvedMantis判断此问题是否被该人resolved的,如果不是就看看修改记录里面有没此人,如果有,那么就要记录到Modify中If Sheets("Sheet1").Cells(MantisRow, "G") = Name ThenIf ResolvedMantis ThenResolvedMantisTime = ResolvedMantisTime + Sheets("Sheet1").Cells(MantisRow, "H")ElseModifyMantisTime = ModifyMantisTime + Sheets("Sheet1").Cells(MantisRow, "H")ModifyMantisNum = ModifyMantisNum + 1End IfEnd IfEnd IfNextSheets("Sheet2").Cells(SummaryRow, "B") = ResolvedMantisNum ' resolved掉的mantis数量Sheets("Sheet2").Cells(SummaryRow, "C") = ModifyMantisNum ' 修改过的mantis数量Sheets("Sheet2").Cells(SummaryRow, "D") = ResolvedMantisTime ' resolved mantis的总时间Sheets("Sheet2").Cells(SummaryRow, "E") = ModifyMantisTime ' 修改mantis的总时间Sheets("Sheet2").Cells(SummaryRow, "F") = ModifyMantisTime + ResolvedMantisTime ' 处理mantis使用的总时间If (ResolvedMantisNum + ModifyMantisNum) = 0 Then ' 处理没有mantis的情况Sheets("Sheet2").Cells(SummaryRow, "G") = 0Else' 平均处理一条mantis耗费的时间Sheets("Sheet2").Cells(SummaryRow, "G") = (ModifyMantisTime + ResolvedMantisTime) / (ResolvedMantisNum + ModifyMantisNum)End If
Next

大致讲解一下,Sheets("Sheet2").Cells(65536, 1).End(xlUp).Row就表示统计表格的最大行数,最外面的for循环,就是要在sheet2中,按照每行,将计算好的数据填进去。

sheet1就是原始数据表格,里面这个for循环就是统计每个人的数据

最后,下面这段,就是将统计和计算好的数据,填入到sheet2中相应的位置中

    Sheets("Sheet2").Cells(SummaryRow, "B") = ResolvedMantisNum ' resolved掉的mantis数量Sheets("Sheet2").Cells(SummaryRow, "C") = ModifyMantisNum ' 修改过的mantis数量Sheets("Sheet2").Cells(SummaryRow, "D") = ResolvedMantisTime ' resolved mantis的总时间Sheets("Sheet2").Cells(SummaryRow, "E") = ModifyMantisTime ' 修改mantis的总时间Sheets("Sheet2").Cells(SummaryRow, "F") = ModifyMantisTime + ResolvedMantisTime ' 处理mantis使用的总时间If (ResolvedMantisNum + ModifyMantisNum) = 0 Then ' 处理没有mantis的情况Sheets("Sheet2").Cells(SummaryRow, "G") = 0Else' 平均处理一条mantis耗费的时间Sheets("Sheet2").Cells(SummaryRow, "G") = (ModifyMantisTime + ResolvedMantisTime) / (ResolvedMantisNum + ModifyMantisNum)

至此,程序完成,如果要运行的话,选择运行菜单中的运行子过程,或者直接按F5就可以了

使用VBA实现数据统计相关推荐

  1. 多条记录取最近日期的一条_Excel VBA:基于员工打卡记录的考勤数据统计

    微信公众号:金融数学 使用VBA做一个基于员工打卡记录的考勤数据分析工具; 1应用场景 某公司通过门禁系统记录了每位员工上下班打卡时间,现在需要对一段特定时间内员工出勤情况进行统计分析,包含加班时间( ...

  2. Python进行Excel数据统计

    Python进行Excel数据统计 前言 示例数据 前期思路 实操 遇到的问题和解决方案 最终结果 实现代码 总结 前言 貌似大家中使用到Excel数据统计和处理比较多.前两天GF发来指示,帮忙统计2 ...

  3. php 自定义表格并统计,PHP 使用Echarts生成数据统计报表的实现

    这篇文章主要介绍了PHP 使用Echarts生成数据统计报表的实现代码,需要的朋友可以参考下 echarts统计,简单示例 先看下效果图 看下代码 HTML页面 为ECharts准备一个Dom,宽高自 ...

  4. 数据统计之用户总量统计

    数据统计 在进入到后台页面后,首先我们需要完成如下功能: 1.用户总数统计 2.日增用户统计 3.日活用户统计 4.下单用户统计 5.月新增用户统计 6.商品访问量统计 [将所有的业务逻辑的代码都放在 ...

  5. 常用的数据统计Sql 总结(转)

    转:http://www.cnblogs.com/zhangweizhong/p/5577842.html 最近刚在搞一个BI的项目,里面需要大量的sql 数据统计相关运用,加深了我又对SQL的理解与 ...

  6. GraphPad Prism —— 简单又好用的生物数据统计绘图软件

    GraphPad Prism 简介 GraphPad Prism是一个数据处理软件,它的优点是专门为生物.医学等生命科学学科所设计,从原始数据到统计绘图,简单地数据分析都可以轻松搞定,并且很容易上手. ...

  7. 个推数据统计产品(个数)iOS集成实践

    2019独角兽企业重金招聘Python工程师标准>>> 最近业务方给我们部门提了新的需求,希望能一站式统计APP的几项重要数据.这次我们尝试使用的是个推(之前专门做消息推送的)旗下新 ...

  8. 记住这个网站:服务器相关数据统计网站 http://news.netcraft.com/

    http://news.netcraft.com/ 需要参考现在服务器相关数据,可以上这个网站. 当然google趋势也是一个可选得备案. 有一个数据统计更全面的: http://w3techs.co ...

  9. 基于springboot实现疫情数据统计系统

    项目编号:BS-XX-038 本系统基于springboot实现开发,主要实现国内各省的疫情数据管理及实时统计,特点是利用图形报表实现展示各省确诊人数.疑似人数.隔离人数.治愈人数,利用不同的数据展示 ...

最新文章

  1. 黄聪:wordpress如何开启文章格式post format
  2. 2017.10.24 上升序列 思考记录
  3. MVC开发中的常见错误-02-在应用程序配置文件中找不到名为“OAEntities”的连接字符串。...
  4. Enjoy模板里使用layui模板引擎laytpl
  5. 进程管理工具   htop
  6. Zabbix 5.0 配置简单WEB网页监测和触发器
  7. PHP查看内存使用量
  8. 智力问答选择题_儿童智力问答题带答案
  9. TOGAF9中文版(五)
  10. zend studio php调试,手把手教你配置zendstudio的xdebug调试过程
  11. 使用 SVI 实现 VLAN 间路由
  12. 如何提炼游戏IP的价值,《梦幻西游三维版》给我们上了一课
  13. python 操作excel排序_python操作excel[转]
  14. 内网数字证书的生成与使用
  15. 请不用条件转移指令JG,JGE,JL,JLE等指令实现如下程序片段的功能
  16. Python获取Excel中超链接并下载至本地
  17. 如何在windows下运用dd来下修复坏块?
  18. java毕业设计城市猎人户外军品店Mybatis+系统+数据库+调试部署
  19. 谨防网上骗子社会工程!
  20. 脚本记录:移动端图片扩大缩小

热门文章

  1. Pb数字变成英文字母金额
  2. 怎样轻松旋转PDF文件
  3. 捏脸是如何实现的?程序化生成3D头像
  4. jacob调用中控考勤机事件监听实现
  5. 升级Win11后Office无法验证此产品的许可证怎么办?
  6. matlab控制电动机调速,控制电机调速及matlab仿真.doc
  7. sklearn库:分类、回归、聚类、降维、模型优化、文本预处理实现用例(赶紧收藏)
  8. android 显示表情符号,吓一跳 同一表情符号iPhone和Android机显示效果差别这么大...
  9. 36岁大数据人被中台问倒,没点架构思维,连面试都过不了?
  10. 播放器实战 10 像素格式与尺寸的转换