在上面两篇文章
✍
分段加合
和
✍
整合排序
中,我们利用VBA小程序求得了各部门的奖励系数总和,并且依据奖励系数对各个部门进行了降序排序。今天我们再进行一个简单却常用的操作——
标引
。
我们依然以前两篇文章中的食品企业的例子来进行说明,这张工作表存在于Sheet2中。
如果现在我们面临这样一个需求:
按照发明名称来区分其是否可以用于火锅、用于休闲食品或者用于制作家庭方便食品
,此外,如果这些发明属于方法类的发明,也要标注出来,最后,分别计算“用于火锅”、“用于休闲食品”、“用于制作家庭方便食品”、“方法类发明”的发明创造的奖励系数。
有的小伙伴会说,区分发明的内容,咋不用分类号呢?哦亲爱的,这个企业不知道什么叫分类号,目前就只有这些发明名称,就酱。
一般来说,如果没有分类号的辅助,那么我们的思路大概率只能是一个一个去理解这些发明名称,然后一个一个在后面标注“火锅”、“休闲食品”、“家庭方便食品”的标签。这个例子里面只有二十几个发明创造,如果这家企业有成百上千个发明创造的话,这种操作无异于又使大家变成了“表哥”和“表姐”。
所以,我们给计算机建立一个字典,这个字典中设立以下规则:
-
-
名称中含有“薯片”、“罐头”、“能量棒”——纳入“休闲食品类”
-
名称中含有“腌制”、“酱”、“粉”——纳入“家庭类”
-
在Excel中,建立字典很简单,只需要赋值语句即可。
此处我们在Sheet3中建立这个字典,并将这个过程命名为dictionary:
经过运行,我们在Sheet3中得到这个字典表现如下。
第一行代表类别的名称,从第二行开始,每一列均为不同类别下的标引词:
接下来
,我们用每一类里的标引词来标引该食品企业所有的发明名称。
思路如下:
① 将Sheet2中的第1、3、4、5列
(即提交日、发明部门、发明名称和奖励系数)
复制到Sheet6的第1-4列,含表头共24行。同时,定义dic和name两个字符串,其中,dic用来被赋予Sheet3中的标引词,name则用来被赋予Sheet6中的发明名称。
② 其次,确定第一层循环是按照行顺序遍历Sheet6中的发明名称,第二层及第三层循环是按先列、后行的顺序遍历Sheet3字典中的标引词。三层循环的语言顺序如下,其中,s代表Sheet6中的行,j代表Sheet3的列,i代表Sheet3的行,t是代表Sheet6中的标引词的起始列数,因为标引词标记在“奖励系数”这一列之后,所以t=5:
For s = 2 To 24
name = Sheet6.Cells(s, 3)
t = 5
For j = 1 To 4
For i = 2 To 5
* 主体程序*
Next
Next
Next
此外,还需要注意,在每结束Sheet6中一个发明名称的标引之后,下一个发明名称的标引都要重新从第5列开始标引,所以t=5的赋值应当在第一层循环之内。