字典对象一个常用功能就是查找,假设数据源是这样的:
用字典来查找数据的代码:
Sub DicSearch()
Dim arr() As Variant
'读取数据源
arr = Range("A1").CurrentRegion.Value
Dim dic As Object
Set dic = VBA.CreateObject("Scripting.Dictionary")
'记录到字典中
Dim i As Long
For i = 2 To UBound(arr)
'这里直接记录数据所在的行号
dic(VBA.CStr(arr(i, 1))) = i
Next
Dim des() As Variant
'读取待查找的项目
des = Range("D1").CurrentRegion.Value
Dim irow As Long
For i = 2 To UBound(des)
irow = dic(VBA.CStr(des(i, 1)))
If irow Then
des(i, 2) = arr(irow, 2)
End If
Next
'输出
Range("D1").Resize(UBound(des, 1), UBound(des, 2)).Value = des
End Sub
比较简单的一段代码,和汇总数据一样,这里只是按照一个条件进行查找,需要按照2个甚至多个条件来查找的时候,需要改动的代码有:
dic(VBA.CStr(arr(i, 1))) = i
irow = dic(VBA.CStr(des(i, 1)))
让我们看看用ADO是如何做的:
Sub ADOSearch()
Dim AdoConn As Object
Set AdoConn = VBA.CreateObject("ADODB.Connection")
'打开数据库
AdoConn.Open "Provider =Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";"
Range("D2").CopyFromRecordset AdoConn.Execute("select A.项目,B.数据 from [Sheet1$D1:D3] A Left Join [Sheet1$A1:B5] B On A.项目=B.项目", , 1)
AdoConn.Close
Set AdoConn = Nothing
End Sub
代码和汇总数据一样,仅仅是修改了sql语句,一旦条件发生变化,也仅仅需要修改sql语句就可以,非常的简单方便。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有