最近遇到很多要在两个表之间同步数据的情况,比如在sheet1 为基础表 表中有非常多的字段
姓名 | 学号 | 班级 | 专业 | 性别 | 年龄 | 籍贯 |
---|---|---|---|---|---|---|
张A | 001 | 一班 | 计算机 | 男 | 15 | 北京 |
王B | 002 | 一班 | 物理 | 男 | 30 | 上海 |
张C | 003 | 一班 | 采矿 | 男 | 18 | 北京 |
李E | 004 | 一班 | 软件 | 男 | 20 | 北京 |
秦F | 005 | 一班 | 财会 | 男 | 26 | 北京 |
而在Sheet2中却只有如下数据
姓名 | 学号 | 班级 | 专业 | 性别 | 年龄 | 籍贯 |
---|---|---|---|---|---|---|
张A | 001 | |||||
张C | 003 | |||||
李E | 004 | |||||
秦F | 005 |
Sheet2中的信息不全,需要补充完整,所以就需要VBA进行快速匹配,但是如果为了通用性,不仅仅局限于这个两张表中,就增加了一些功能。首先建立一个窗体增加如下控件:
三个下拉框分别为选取需要匹配的工作表,也就是本立中的Sheet2,另一个作为基准表,也就是本利中的Sheet1,二基准字段为两个表中匹配时作为关联的一个字段,本利中未学号,需要为唯一值。
新建一个模块,用于存放基础方法,共需建立一个窗口一个模块
基础功能模块中算法如下:
Function 获取表头数组(表名)
'''本方法作用是输入表名,返回对应表中首行表头组成的数组
'''使用了字典的作用是为了去重
'关闭页面刷新
Application.ScreenUpdating = False
Sheets(表名).Select
With Sheets(表名)
表行数 = Sheets(表名).UsedRange.Rows.Count
表列数 = Sheets(表名).UsedRange.Columns.Count
表头数组 = Sheets(表名).Range(Cells(1, 1), Cells(1, 表列数)).Value
Dim 表头字典 As Object '声明字典对象,亦可通过声明变体型变量完成声明 >>> Dim d
Set 表头字典 = CreateObject("Scripting.Dictionary") '声明字典
For i = 1 To 表列数
表头字典(Sheets(表名).Cells(1, i)