excel 2007 vba与宏完全剖析_Excel宏VBA小技巧系列 | 分段加合

写在前面的话  知识产权算是一个盛产数据的行业。专利啊商标啊著作啊,都有著录项目。我们常说的专利分析、产业导航、企业导航、产业预警、竞争情报、技术综述、知识产权评议等等,常规操作之一就要先处理著录项目数据,然后再进行不同角度的分析。有的小伙伴们会问,分析啊导航啊预警啊有什么区别啊,不都是一回事儿吗?君觉得说得很对,就像吃饭:有的人为了减肥,所以糖少一点;有的人为了增肌,所以蛋白质多一点;有的人为了养生,所以注重纤维素和维生素的搭配;吃饭的目的不同,所以食物的结构、成分、数量都不一样。不过,对大多数过一天算一天的人来说,吃饭就是按部就班、填饱肚子而已。所以说一回事儿也行,说不一回事儿也行,主要看精不精致。
“分析”这种能力,堪称人类智慧之光。专利分析领域有很多大神,还有许多高明的工具和技巧。不过君对分析是七窍通了六窍——一窍不通,所以分析绝对不是这篇文章的重点。这系列的文章,只想聊几个Excel宏VBA的小程序(其实并不限于处理专利数据,只是图个方便图个开心罢了),篇幅短小,而且比较快更。e1cea6494ef300263ffdbdac6860c7fd.gif

假如,某食品企业,每个部门按期提交发明创造。企业统计人员把发明创造的提交日、年份、发明名称、奖励系数汇总到一张表里。

3d10dcab7e5b20044f7b4c4bde0ea316.png

如果现在需要分段统计各个部门的奖励系数的总数,怎么办呢?有的小伙伴可能手动用SUM函数求和来搞定,或者可能用“合并计算”搞定咯。

不过,虽然手动操作的技巧简单易学,但当多个数据文件需要一系列的复杂手动操作时,手动操作就存在一些Bug:每换一套数据,就要重新手动操作一遍,并且,如果处理数据的人员更换,这一系列复杂手动操作的可移植性和准确性都比较堪忧。人力因素在处理数据的过程中难以抽离,大家很容易变成“表哥”和“表姐”。相比于人工手动操作,宏VBA程序因为在运行过程中剔除了人工的因素,所以可移植性和准确性都较高。而且,编写一段程序,相当于对不同的待处理数据固定了相同的“标准”。这个“统计各个部门发明奖励系数总数”的简单小例子,着重传达一种程序思维。

第一步:打开宏程序编辑界面

根据Excel版本的不同,可以在 “视图” 中录制一个空的宏,停止录制后进行编辑。也可以在Excel选项的自定义功能区中勾选 “开发工具” 访问宏功能。

第二步:定义Sub过程及变量

我们把完成“按部门加合发明奖励系数”的这个过程定义为bigtitle,当然,用其他的名字也可以。随后,我们要定义四个整型变量:

  • i 代表数据区域的行的变量

  • j 代表上一段相同部门底端的行

  • k 代表下一段相同部门底端的行

  • t 代表在一段相同部门的数据范围内变化的行

fcd3df991f3a3d3c69701b2e6591eb0b.png

随后我们再定义两个字符串变量:str1代表第i行的部门名称,str2代表第i+1行的部门名称。

写为:

Sub bigtitle()
Dim i, j, k, t As Integer
Dim str1, str2 As String
*程序主体*
End Sub

第三步:梳理循环和条件逻辑

① 第一层循环,i从表的第2行循环赋值至第24行,在i的每次赋值过程中,表中第i列、第3列的部门信息被赋值给str1,同时第i+1行、第3列的部门信息被赋值给str2。

写为:

For i=2 To 24
  str1 = Sheet2.Cells(i,3)
  str2 = Sheet2.Cells(i+1,3)
  *条件语句*
Next

② 条件语句,当str1不等于str2时,说明i所在的行已经到了该相同部门的最后一行,从i+1行起,就进入了下一个部门。这时,我们把这个i值赋给k,作为该段相同部门底端的行的标记,同时,把原k值赋给j,用于标记上一段相同部门底端的行。在判断str1和str2是否相同时,我们使用字符串对比函数StrComp。

写为:

If StrComp(str1, str2, 1) <> 0 Then
  j = k
  k = i
  *第二层循环*
End If

③ 第二层循环,当j和k确定后,从第j+1行到第k行,部门名称相同,即同一部门。此时设置t变量,其循环范围从第j+1行到第k行,将在此范围内的所有第5列的奖励系数都加总到第k行的第6列。这里需要注意的是,应当设置k的初始值为1。

写为:

For t = j+1 To kSheet2.Cells(k, 6) = Sheet2.Cells(k, 6) + Sheet2.Cells(t, 5)Next

这样,运行宏之后,就可以得到各个部门的总奖励系数:

3b0a0ff5dc8f7443e070e515613fc903.png

全体Sub过程如下,由两层循环和一层条件判断构成,给大家做个参考。

dbc7afc4feec29bf148ffeae647cb63f.png

这样,当数据量变大时,只需要修改第一层循环中“For i=2 To 24”的24至最后一条数据所在行的行数,然后重新运行宏,即可完成大量数据分段加合的工作。

6a20712f724058c81609b09780804079.png下期预告: Excel宏VBA小技巧系列之整合排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redhat虚拟机安装

做过好多使用VMware workstation虚拟机搭建的系统&#xff0c;这是我第一次使用Virtual Box&#xff0c;感觉跟Vmware差不多&#xff0c;我的本子的系统是win7 64位。 下面演示安装的是在VirtualBox里安装rhel 6.4 linux 64位系统。 一、VirtualBOX 版本。 二、虚拟机的配置。…

mysql 查看表v空间自增涨_MySQL InnoDB表空间加密

从 MySQL5.7.11开始&#xff0c;MySQL对InnoDB支持存储在单独表空间中的表的数据加密 。此功能为物理表空间数据文件提供静态加密。该加密是在引擎内部数据页级别的加密手段&#xff0c;在数据页写入文件系统时加密&#xff0c;加密用的是AES算法&#xff0c;而其解密是在从文件…

ideaspringboot项目上传服务器_PHP中使用 TUS 协议来实现可恢复文件上传

曾经尝试过用PHP上传大文件吗&#xff1f;想知道您是否可以从上次中断的地方继续上传&#xff0c;而不会在遇到任何中断的情况下再次重新上传整个数据&#xff1f;如果您觉得这个场景很熟悉&#xff0c;请接着往下阅读。文件上传是我们几乎所有现代Web项目中的一项很常见的任务…

java使用xml存储数据_用存储过程和 JAVA 写报表数据源有什么弊端?

用存储过程和 JAVA 写报表数据源有什么弊端&#xff1f;跟着小编一起来一看一下吧&#xff01;我们在报表开发中经常会使用存储过程准备数据&#xff0c;存储过程支持分步计算&#xff0c;可以实现非常复杂的计算逻辑&#xff0c;为报表开发带来便利。所以&#xff0c;报表开发…

MAC OS上JAVA1.6 升级1.7,以及 maven3.2.1配置

一、我的MAC系统 预装的Jdk是1.6&#xff0c;由于需要使用eclipse MARs 2版本&#xff0c;故需要升级到1.7 二、下载JAVA jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 不知道为什么直接下非常慢&#xff0c;后来用的迅雷就超级快…

sql server 创建唯一性非聚集索引语句_数据库专题—索引原理

深入浅出数据库索引原理参见:https://www.cnblogs.com/aspwebchh/p/6652855.html1.为什么给表加上主键&#xff1f;1.平时创建表的时候&#xff0c;都会给表加上主键。如果没有主键的表&#xff0c;数据会一行行的排列在磁盘上&#xff0c;查找一个数据需要一条条的进行对比。而…

oracle数据库更新语句_20_手把手教你学Python之操作数据库

数据库是数据的仓库&#xff0c;将大量数据按照一定的方式组织并存储起来&#xff0c;方便进行管理和维护&#xff0c;例如快速检索和统计等。数据库的主要特点&#xff1a;以一定的方式组织、存储数据&#xff1b;能为多个用户共享&#xff1b;与程序彼此独立。……数据库管理…

查询Oracle正在执行的sql语句

--查询Oracle正在执行的sql语句及执行该语句的用户 [sql] view plaincopy SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名 FROM v$p…

WinForm 清空界面控件值的小技巧

WinForm 清空界面控件值的小技巧 原文:WinForm 清空界面控件值的小技巧在WinForm里面有时候需要清空自己输入内容或是选择的选项&#xff0c;以便重新操作流程&#xff0c;那么一般你是怎么清空界面各个控件值的呢&#xff1f;如果窗体里面控件&#xff0c;尤其是TextBox控件比…

virsh的使用

2019独角兽企业重金招聘Python工程师标准>>> ###这里最先要完成的是对网卡的配置(os ubuntu14.04) 目的是实现vm上是以桥接的方式联网 修改/etc/network/interfaces # interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback #auto eth0…

SQL Server - 高可用与灾难恢复(HADR)技术 -- AlwaysOn可用性组(理论篇)

因为篇幅原因&#xff0c;AlwaysOn可用性组被拆成了两部分&#xff1a;理论部分和实战部分。而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建。 三篇文章各自的链接&#xff1a; SQL Server ->> 高可用与灾难恢复&#xff08;HADR&#xff09;技术 -- AlwaysOn&…

python 3.6.5编译安装_Linux系统安装Python3.6.5

Linux系统安装Python3.6.5 1、下载Python3.6.5 wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz 如果报command not found则执行&#xff1a;yum -y install wget命令后再进行下载 也可下载好安装包进行手动上传 2、安装Python3.6可能使用的依赖 yum install o…

从传统运维到云运维演进历程之软件定义存储(一)

运维是企业业务系统从规划、设计、实施、交付到运维的最后一个步骤&#xff0c;也是重要的步骤。运维从横向、纵向分可以分为多个维度和层次&#xff0c;本文试图抛开这纷繁复杂的概念&#xff0c;讲述一个传统的企业级运维人员转型到云运维人员&#xff0c;尤其是软件定义存储…

Abp Uow 设计

初始化入口 在AbpKernelModule类中&#xff0c;通过UnitOfWorkRegistrar.Initialize(IocManager) 方法去初始化 1 /// <summary>2 /// This class is used to register interceptor for needed classes for Unit Of Work mechanism.3 /// </summary>4 …

python3.8 实现鼠标自动移动_“新生报到”!【移动机器人 HD-1500】负载1500kg,实现了重型货物运输的自动化...

2020年第三季度欧姆龙自动化&#xff08;中国&#xff09;有限公司新品【移动机器人 HD-1500】即日起在中国市场首次对外发布&#xff0c;实现了重型货物运输的自动化。这款最新的自动化移动机器人重型载荷能力为1500 kg&#xff01;更高的载荷能力可以令客户实现以前无法实现的…

android 监听本机网络请求_fiddler如何抓取https请求实现fiddler手机抓包-证书安装失败100%解决...

一、HTTP协议和HTTPS协议。(1) HTTPS协议HTTP协议SSL协议&#xff0c;默认端口&#xff1a;443(2) HTTP协议&#xff08;HyperText Transfer Protocol&#xff09;&#xff1a;超文本传输协议。默认端口&#xff1a;80&#xff0c;其中包含请求和响应两部分&#xff0c;其中请求…

C#的四舍五入函数

2019独角兽企业重金招聘Python工程师标准>>> 1.四舍六入&#xff08;国外的四舍五入&#xff09; Math.Round&#xff08;num&#xff09;; 2.四舍五入 Math.Round(num,MidpointRounding.AwayFromZero); 转载于:https://my.oschina.net/CrazyBoy1024/blog/746268

【BZOJ2243】 [SDOI2011]染色

Description 给定一棵有n个节点的无根树和m个操作&#xff0c;操作有2类&#xff1a; 1、将节点a到节点b路径上所有点都染成颜色c&#xff1b; 2、询问节点a到节点b路径上的颜色段数量&#xff08;连续相同颜色被认为是同一段&#xff09;&#xff0c;如“112221”由3段组成&am…

数字信号处理的fpga实现_FPGA数字信号处理:通信类I/Q信号及产生

大侠好&#xff0c;欢迎来到FPGA技术江湖&#xff0c;江湖偌大&#xff0c;相见即是缘分。大侠可以关注FPGA技术江湖&#xff0c;在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源&#xff0c;或者一起煮酒言欢。大侠好&#xff0c;“宁夏李治廷”再一次和各位见…

iic通讯协议

IIC总线 一般串行数据通讯都有时钟和数据之分,有异步和同步之别. 有单线,双线和三线等. I2C肯定是2线的(不算地线). I2C协议确实很科学,比3/4线的SPI要好,当然线多通讯速率相对就快了. I2C的原则是: 在SCL1(高电平)时,SDA千万别忽悠!!! 否则,SDA下跳则"判罚"为&…