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

本文介绍了一种利用Excel VBA宏程序实现自动化的数据处理方法,特别针对知识产权行业中涉及的大量著录项目数据,通过具体实例展示了如何高效地进行分段统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值