|
- ' 定义一个名为ykcbf的子过程,用于合并两个工作表的数据并根据指定条件填充到Sheet1
- '
- ' 实现原理:
- ' 1. 创建一个字典d,用于存储数据表(数据)中两列拼接后的唯一键及其对应的行号
- ' 2. 获取数据表(数据)的最后一行
- ' 3. 将数据表的第一列和第二列拼接,作为键,存储到数组arr中,并更新字典d
- ' 4. 遍历brr(Sheet1的待处理数据),如果键存在于字典d中,则将对应的数据填充到Sheet1的相应位置
- ' 5. 将处理后的brr赋值给Sheet1的[a1]区域
- ' 6. 清理内存,释放字典对象,恢复屏幕更新,并显示消息框确认操作完成
- Sub ykcbf()
- ' 创建一个字典对象d,用于存储键值对
- Dim arr, d
- ' 禁用屏幕更新以提高性能
- Application.ScreenUpdating = False
- ' 创建字典d
- Set d = CreateObject("Scripting.Dictionary")
- ' 选择数据表(数据)的工作表
- With Sheets("数据")
- ' 获取最后一行的行号
- r = .Cells(.Rows.Count, "a").End(xlUp).Row
- ' 将数据表的前六列(包括标题)复制到数组arr
- arr = .[a1].Resize(r, 6)
- End With
- ' 遍历arr,将第一列和第二列拼接为键,值为行号
- For i = 2 To UBound(arr)
- s = arr(i, 1) & arr(i, 2)
- d(s) = i
- Next
- ' 选择Sheet1
- With Sheets("Sheet1")
- ' 获取最后一行的行号
- r = .Cells(.Rows.Count, "a").End(xlUp).Row
- ' 将Sheet1的前六列(包括标题)复制到数组brr
- brr = .[a1].Resize(r, 6)
- ' 遍历brr,如果键存在字典d中,将对应arr的数据填充到brr
- For i = 2 To UBound(brr)
- s = brr(i, 1) & brr(i, 2)
- If d.Exists(s) Then
- ' 从arr中获取匹配行的数据填充到brr
- For j = 3 To UBound(arr, 2)
- brr(i, j) = arr(d(s), j)
- Next
- End If
- Next
- ' 将处理后的brr覆盖到Sheet1的[a1]区域
- .[a1].Resize(r, 6) = brr
- End With
- ' 释放字典对象,恢复屏幕更新
- Set d = Nothing
- Application.ScreenUpdating = True
- ' 显示消息框确认操作完成
- MsgBox "OK!"
- End Sub
复制代码 |
评分
-
3
查看全部评分
-
|