大家好,今日我們繼續(xù)講解VBA數(shù)組與字典解決方案,今日講解第63講內(nèi)容:將字典中鍵值item定義為類,利用類得屬性處理實(shí)際問(wèn)題。
在之前得講解中,我講過(guò),對(duì)于字典來(lái)說(shuō),最重要是對(duì)鍵和鍵值得理解,對(duì)于鍵來(lái)說(shuō),最主要得是沒有有重復(fù)值,我們利用這點(diǎn)解決了排重得很多問(wèn)題;對(duì)于鍵值來(lái)講,要理解它可以裝載任何得數(shù)據(jù)類型得數(shù)據(jù)、數(shù)組、甚至是字典。今日我講解得是ietm裝載類。
我們?cè)诶米值涞脮r(shí)候,往往將鍵作為單獨(dú)數(shù)據(jù),以外得數(shù)據(jù)裝入數(shù)組然后賦值給鍵值,這種處理方法比較復(fù)雜,為了尋求一種更好得辦法,我們可以用類得方法,將數(shù)據(jù)放到類得屬性中。
類是用戶自己定義得對(duì)象和過(guò)程,并組織在一起,該對(duì)象有自己得屬性。我們今日得內(nèi)容只是簡(jiǎn)單得利用類得屬性,來(lái)解決我們得實(shí)際問(wèn)題。
實(shí)例:如下A列到D列數(shù)據(jù),我們要提取數(shù)據(jù)得同時(shí)完成計(jì)算:序列4=序列1+序列2
序列5=序列3+序列2。如何解決呢?
思路分析:上述過(guò)程如果用數(shù)組實(shí)現(xiàn)也是可以得,將序列1,序列2,序列3數(shù)據(jù)放到數(shù)組中,作為鍵值裝入字典,然后再提取即可,今日我們用類得方法解決,我們先定義一個(gè)類,將數(shù)據(jù)序列1,序列2,序列3得數(shù)據(jù)作為類得屬性,然后將類直接作為鍵值裝入字典。
下面看我得代碼實(shí)現(xiàn):
Sub mynzsz_63() '第63講 將字典中鍵值item定義為類,利用類得屬性處理實(shí)際問(wèn)題
Sheets("63").Select
Dim uu As myitem
'將數(shù)據(jù)裝入數(shù)組
myarr = Range("a2:d" & Range("a1").End(xlDown).Row)
Set mydic = CreateObject("scripting.Dictionary") '后期綁定引用字典對(duì)象
'將數(shù)據(jù)裝入字典,鍵值是類,利用類得屬性完成字典數(shù)據(jù)得賦值
For i = 1 To UBound(myarr)
Set uu = New myitem
uu.ido = myarr(i, 2)
uu.idt = myarr(i, 3)
uu.ids = myarr(i, 4)
mydic.Add myarr(i, 1), uu
'mydic(myarr(i, 1)) = uu '注意這種寫法不可以
Set uu = Nothing
Next
'清空數(shù)據(jù)回填
[f:h].Clear
[f1:h1] = Array("名稱", "序列4", "序列5")
'回填過(guò)程中利用類得屬性取得數(shù)據(jù)
i = 2
For Each K In mydic.keys
Cells(i, 6) = K
Cells(i, 7) = mydic(K).ido + mydic(K).idt
Cells(i, 8) = mydic(K).idt + mydic(K).ids
i = i + 1
Next
Set mydic = Nothing
End Sub
代碼截圖:
代碼解析:
1 上述代碼實(shí)現(xiàn)了:先定義一個(gè)new類uu,將數(shù)據(jù)序列1,序列2,序列3得數(shù)據(jù)作為類得屬性ido、 idt、 ids,然后將類直接作為鍵值裝入字典。在提取數(shù)據(jù)時(shí)直接可以提取屬性值參與運(yùn)算。
2 myarr = Range("a2:d" & Range("a1").End(xlDown).Row)
上述代碼將數(shù)據(jù)存入數(shù)組
3 for i = 1 To UBound(myarr)
Set uu = New myitem
uu.ido = myarr(i, 2)
uu.idt = myarr(i, 3)
uu.ids = myarr(i, 4)
mydic.Add myarr(i, 1), uu
'mydic(myarr(i, 1)) = uu '注意這種寫法不可以
Set uu = Nothing
Next
上述代碼實(shí)現(xiàn)了字典得賦值,鍵myarr(i, 1),對(duì)應(yīng)得鍵值是uu ,而ido、idt、ids是三個(gè)屬性值。
這里要注意得是'mydic(myarr(i, 1)) = uu,這種寫法不可以,要留意。
4 For Each K In mydic.keys
Cells(i, 6) = K
Cells(i, 7) = mydic(K).ido + mydic(K).idt
Cells(i, 8) = mydic(K).idt + mydic(K).ids
i = i + 1
Next
數(shù)據(jù)得回填過(guò)程,利用了類得屬性直接提出數(shù)據(jù)相加減。
下面看代碼得運(yùn)行:
今日內(nèi)容回向:
1 如何將數(shù)據(jù)賦值給類得屬性?
2 如何將類賦值給字典?