大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第80講內容:利用字典實現單條件,結果多值查詢。
到這裡字典的講解已經進入尾聲了,在餘下的幾講中,我將重點給大家講解一下利用字典進行查詢的各種方案,對於單值的查詢,前面已經講了很多,這裡不再講解,今天給大家講解的是單條件,即一個條件,但結果是多值的查詢,也就是一對多的查詢,後面還會陸續實現更多的查詢方法。
實例,如下面的截圖,我們要在數據區域的數據中查找到各個型號的類別,對於一個型號來說,類別是各式各樣的,要提取出全部的數據。
思路分析:為了實現題目的要求,我們首先把數據裝入字典中,在裝入字典的時候,型號作為鍵,類別作為鍵值,如果類別不是唯一的情況下,那麼將類別數據合併處理,在查詢的時候,只要提取所給數據對應的鍵值即可。
下面看我給出的代碼:
Sub mynzsz_80() '第80講 利用字典實現單條件,結果多值查詢
Sheets("80").Select
'將數據存入數組
myarr = Range("a2:f" & Range("a2").End(xlDown).Row)
'創建字典對象
Set mydic = CreateObject("Scripting.Dictionary")
'在字典中裝入數據
For i = 1 To UBound(myarr)
mydic(myarr(i, 1)) = mydic(myarr(i, 1)) & " " & myarr(i, 2)
Next i
' 數據的回填
Set myRng = Range(Cells(2, "I"), Cells(Range("I2").End(xlDown).Row, "I"))
For Each uu In myRng
'清空數據
Cells(uu.Row, "J") = ""
'填入查到的數據
Cells(uu.Row, "J") = mydic(uu.Value)
Next
Set mydic = Nothing
MsgBox ("ok")
End Sub
代碼的截圖:
代碼分析:
1 上述代碼中,將數據賦值給數組myarr,之後給字典mydic賦值,賦值的時候,提取數組的第一個值作為鍵,如果鍵值是多個,那麼用mydic(myarr(i, 1)) & " " & myarr(i, 2)進行合併處理。最後在查詢的時候,只要提取所給出查詢數據的鍵值即可:Cells(uu.Row, "J") = mydic(uu.Value)
2 '將數據存入數組
myarr = Range("a2:f" & Range("a2").End(xlDown).Row)
上述語句是將數據裝入數組中。
3 '在字典中裝入數據
For i = 1 To UBound(myarr)
mydic(myarr(i, 1)) = mydic(myarr(i, 1)) & " " & myarr(i, 2)
Next i
上述語句在字典中裝入數據,如果是鍵是重複的,鍵值將合併處理。
4 Set myRng = Range(Cells(2, "I"), Cells(Range("I2").End(xlDown).Row, "I"))
上述語句是將定義查詢區域,即:型號所在的單元格
5 For Each uu In myRng
'清空數據
Cells(uu.Row, "J") = ""
'填入查到的數據
Cells(uu.Row, "J") = mydic(uu.Value)
Next
上述語句實現查詢,注意上述代碼中的uu.VALUE是指單元格的值。
6 Set mydic = Nothing
清空內存。
下面看代碼的運行:
今日內容迴向:
1 如何實現字典的單條件多值返回的查詢?
2 如何給重複數據進行合併?
閱讀更多 VBA專家 的文章