說起VLOOKUP大家都不陌生,但你有沒有試過用VLOOKUP一次處理超過幾十萬條記錄呢?年底了負責做成本分析的同事求助,用VLOOKUP處理大量數據的時候需要等待很長時間甚至Excel會直接卡死,有沒有更高效的方法呢? 下面向大家介紹使用字典對象應對VLOOKUP處理大量數據時力不從心的問題。 1、假設有兩個表格:表2存放訂單號及部門、類型、金額、日期、負責人、完成狀態(tài)等相關信息,共100萬條記錄;表1存放待查找的訂單號及金額、完成狀態(tài)信息,共50萬條記錄。 2、按Alt F11快捷鍵,進入VBA編輯窗口,插入一個模塊,寫入以下代碼: Sub DLOOKUP() Dim dic As Object Dim arr, brr Dim acol As Long, bcol As Long Dim itm Dim crr() As Long Set dic = CreateObject('Scripting.Dictionary') arr = Sheet1.Range('A1').CurrentRegion brr = Sheet2.Range('A1').CurrentRegion acol = Sheet1.Range('A1').CurrentRegion.Columns.Count bcol = Sheet2.Range('A1').CurrentRegion.Columns.Count ReDim crr(2 To acol) '重定義為與表1的列一致 For i = 2 To acol For j = 2 To bcol If arr(1, i) = brr(1, j) Then crr(i) = j Next Next For i = 2 To UBound(brr) dic(brr(i, 1)) = i Next For i = 2 To UBound(arr) itm = dic(arr(i, 1)) If itm <> '' Then For j = 2 To acol arr(i, j) = brr(itm, crr(j)) Next End If Next Sheet1.Range('A1').Resize(UBound(arr), acol) = arr Set dic = Nothing End Sub 3、運行宏DLOOKUP(),1-2分鐘后,結果就在表1中顯示出來了。 以后只需要在表2中存放數據源(關鍵字放第1列),在表1中存放待查找的關鍵字(關鍵字放第1列)和需要引用的字段名,然后運行下DLOOKUP()就可以了。 字典概念和基本用法: 字典(Dictionary)是腳本語言(Scripting)中提供的一個對象,通過建立字典可以實現高效的數據查詢。 用法1:Dictionary(Key)=Item 在字典(Dictionary)中為關鍵字(Key)和條目(Item)建立對應關系。 用法2:Item=Dictionary(Key) 在字典(Dictionary)中查找關鍵字(Key)對應的條目(Item)。 上文的DLOOKUP()首先建立了一個字典對象dic,用arr和brr分別保存表1和表2的數據,找出表1所要引用的字段名在表2中對應的列號;然后在字典中為表2的訂單號和行號建立對應關系,在字典中查找表1的訂單號得到對應的行號;最后根據行號和列號將表2中對應的數據寫到表1中。 字典對象還有Key、Item等屬性和Add、Remove、Exists等方法,除了實現查找和引用,還可以實現去重、替換、排序等各種功能,而且效率很高。 作者:水長川 |
|
來自: L羅樂 > 《VLOOUP查詢教程》