1.需求场景
今天遇到个问题,需要对大量表格中的“编号”字段对应补充上“名称”信息。已有“编号”与“名称"的对应关系表,"编号"是个具有唯一性的字段。需要处理的大量表格中出现的编号都可以在在对应关系表中找到,姓名与编号是一对一关系。
2.解决思路
如果是单一或者少量的表格需要处理,可以使用vlookup函数,按照编号将名称匹配到需要处理的表格中即可。可是需要处理的表格是大量分散的文件,如果再用vlookup函数一个个处理,就会耗费大量的时间。这时就可以利用以前介绍过的批量提取文件路径的方法(具体见【实用VBA:6.一键批量提取文件名和存储路径】),先提取文件路径;再利用一个循环遍历各个文件,逐一打开文件;然后再按照vlookup函数的思路,逐行判断编号字段所在的列单元格中的编号值与“编号名称对应表”中的哪个编号一致;再从对应表中取出对应的那一行的“名称”信息,填入待处理的表格中;以此循环往复……
那么每次查找“编号名称对应表”中那个对应的编号都访问一遍这个表格似乎有点麻烦。频繁在待处理表和对应表之间切换也比较费时间。于是,考虑到我的“编号名称对应表”只有1000+条数据,决定使用数组来处理。
- 先把对应关系表读入一个二维数组中,n行,2列,n即为对应关系表的条数,2列的值分别是“编号”和“名称”。
- 打开待处理表格之后,取出一个编号,拿这个编号和二维数组中的编号逐一对比。
- 找到二维数组中匹配的编号后,读取该数组当前行的“名称”