02.27 單條件,結果多值查詢的字典實現

大家好,今日我們繼續講解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 如何給重複數據進行合併?


分享到:


相關文章: