|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
17:05
我:给我写一段如何跨Excel工作簿实现快速数据匹配的VBA代码
17:05
ChatGPT:以下是一个简单的VBA代码示例,用于跨Excel工作簿进行快速数据匹配。本示例假设你有两个工作簿:一个名为“数据源.xlsx”的工作簿,另一个名为“匹配结果.xlsx”的工作簿。我们将在这两个工作簿之间比较一列数据,并将匹配结果记录在“匹配结果.xlsx”工作簿的新列中。
```
Sub 数据匹配()
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lastRow1 As Long, lastRow2 As Long
Dim i As Long, j As Long
Set wb1 = Workbooks("数据源.xlsx")
Set wb2 = Workbooks("匹配结果.xlsx")
Set ws1 = wb1.Worksheets("Sheet1")
Set ws2 = wb2.Worksheets("Sheet1")
lastRow1 = ws1.Cells(Rows.Count, "A").End(xlUp).Row
lastRow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
'遍历数据源.xlsx的Range("A1:A"&lastRow1),查找与匹配结果.xlsx的Range("A1:A"&lastRow2)匹配的值
For i = 1 To lastRow1
For j = 1 To lastRow2
If ws1.Range("A" & i) = ws2.Range("A" & j) Then
'如果匹配成功,则在匹配结果.xlsx的B列中记录该值
ws2.Range("B" & j) = ws1.Range("A" & i)
Exit For
End If
Next j
Next i
MsgBox "数据匹配完成!"
End Sub
```
请注意,上述代码仅适用于在同一计算机上打开的工作簿。如果你要在不同的计算机上运行代码,则需要使用其他方法来引用工作簿和工作表。
17:05
我:你上面这个代码运行效率会非常低下,请把VBA的数组、字典这些工具和手段用起来,优化代码,提升运行效率
17:05
ChatGPT:好的,以下是经过优化后的VBA代码:
```
Sub DataMatch()
Dim dict As Object ' 创建字典对象
Set dict = CreateObject("Scripting.Dictionary")
Dim dataArr As Variant ' 声明数据数组
Dim matchArr As Variant ' 声明匹配数组
' 获取第一个工作簿中的数据范围
With Workbooks("Workbook1.xlsx").Sheets("Sheet1")
dataArr = .Range("A1").CurrentRegion.Value2 ' 将数据存入数组
For i = 2 To UBound(dataArr, 1) ' 遍历数据
If Not dict.exists(dataArr(i, 1)) Then ' 如果字典中没有该值,添加到字典
dict.Add dataArr(i, 1), dataArr(i, 2)
End If
Next i
End With
' 获取第二个工作簿中的数据范围
With Workbooks("Workbook2.xlsx").Sheets("Sheet1")
matchArr = .Range("A1").CurrentRegion.Value2 ' 将匹配数据存入数组
For i = 2 To UBound(matchArr, 1) ' 遍历匹配数据
If dict.exists(matchArr(i, 1)) Then ' 如果字典中存在该值,将对应的值写入匹配数据所在行的第二列
.Cells(i, 2).Value2 = dict.Item(matchArr(i, 1))
End If
Next i
End With
End Sub
```
这段代码使用了VBA的字典对象来存储数据,避免了每次都要遍历整个数据集合的问题。同时,通过将数据存储在数组中,也避免了反复访问工作表的开销,提高了代码的运行效率。
|
|