表格会有5000行左右的数据,如果一直用Vlookup,表格会非常卡顿,工作效率低下,亟待解决,考虑VBA来做单条件匹配(多条件匹配后续继续学)
Sub DctFind()
Dim d As Object, arr, brr, i&
Set d = CreateObject("scripting.dictionary")
d.CompareMode = vbTextCompare
'-----------------------------------------------------------------------------------------------------------------------------------
'装入: 数据源装入数组arr, 查询区域数据装入数组brr,遍历数组arr,UBound(arr)表示数组arr的最大行号。将学号作为key,姓名作为item装入字典
arr = Sheets("aa").UsedRange
brr = [A1:G55555]
For i = 1 To UBound(arr)
d(arr(i, 1)) = arr(i, 6)
d(arr(i, 2)) = arr(i, 5)
d(arr(i, 3)) = arr(i, 4)
d(arr(i, 4)) = arr(i, 3)
d(arr(i, 5)) = arr(i, 2)
d(arr(i, 6)) = arr(i, 1)
Next
'-----------------------------------------------------------------------------------------------------------------------------------
'遍历:标题行不用查询,从第二行开始遍历查询数值brr,如果字典中存在考号,根据考号从字典中取值。如果字典中不存在相关考号,则值返回为空
For i = 2 To UBound(brr)
If d.exists(brr(i, 1)) Then
brr(i, 2) = d(brr(i, 1))
brr(i, 3) = d(brr(i, 2))
brr(i, 4) = d(brr(i, 3))
brr(i, 5) = d(brr(i, 4))
brr(i, 6) = d(brr(i, 5))
Else
brr(i, 2) = ""
brr(i, 3) = ""
brr(i, 4) = ""
brr(i, 5) = ""
brr(i, 6) = ""
End If
Next
'-----------------------------------------------------------------------------------------------------------------------------------
'写入:设置文本格式,避免某些文本数值变形,结果数组写入单元格区域,释放字典
With [A1:G55555]
.NumberFormat = "@"
.Value = brr
End With
Set d = Nothing
' '-----------------------------------------------------------------------------------------------------------------------------------
End Sub
如果现实不出来表格,请您参考附件
我主要是修改代码里的arr brr,
在bb sheet里正常引用aa sheet里的数据