利用VBA字典實現單條件,結果多值查詢


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM