|
本帖最后由 可爱小喵喵 于 2023-4-9 18:56 编辑
这个数据表数据量有几万行多个表80多M大小,这话复制匹配会有点慢,可以优化吗?
Sub 匹配系统信息()
Dim d As Object, Arr, Brr, Crr, dl, i&, s
Dim wb As Workbook
Set d = CreateObject("scripting.dictionary") '字典
Set dl = CreateObject("scripting.dictionary") '字典
Crr = Sheets("查询").[A1].CurrentRegion
Set wb = Workbooks.Open(ThisWorkbook.Path & "\数据源.xlsx") '打开数据源
'多条件查询
Arr = wb.Sheets("查询NR_DU小区静态参数").[A1].CurrentRegion '打开数据源查询NR_DU小区静态参数
i = wb.Sheets("查询NR_DU小区静态参数").Range("F" & Rows.Count).End(xlUp).Row 'F列行号
wb.Sheets("查询NR_DU小区静态参数").Range("F2:F" & i).CurrentRegion.Copy Sheets("查询").Range("E2")
wb.Sheets("查询NR_DU小区静态参数").Range("B2:F" & i).CurrentRegion.Copy Sheets("查询").Range("C2")
这个里把"查询NR_DU小区静态参数"F列和b列的第二行到最后一行的数据复制到”查询”E2和C2为啥出错了呢
For i = 2 To UBound(Arr)
d(Arr(i, 2) & Arr(i, 6)) = Array(Arr(i, 1), Arr(i, 5))
Next
'单条件查询
Brr = wb.Sheets("查询gNodeB功能").[A1].CurrentRegion
For i = 2 To UBound(Brr)
dl(Brr(i, 2)) = Brr(i, 5)
Next
'关闭数据源
wb.Close False
'单条件查询加取值前五位字符
For i = 2 To UBound(Crr)
If d.exists(Crr(i, 3) & Crr(i, 5)) Then
s = d(Crr(i, 3) & Crr(i, 5))
Crr(i, 1) = Left(s(0), 5) '查询A列输出
Crr(i, 4) = s(1) '查询D列输出
End If
If dl.exists(Crr(i, 3)) Then
Crr(i, 2) = dl(Crr(i, 3)) '查询B列输出
End If
Next
[A1].Resize(UBound(Crr), 5) = Crr
Set d = Nothing
Set dl = Nothing
End Sub
|
|