大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第79講内容:利用字典彙總數據的幾種常見方法總結。
利用字典彙總并提取數據,是我們經常要用到的,利用字典排重性可以很方便得到一個主鍵不重複的數據彙總,在以往的各個章節中,我利用了各種方法達到這個目的,今日我就這個問題做一個總結,看看利用字典彙總數據的時候,都有哪些基本的方法,代碼如何書寫,還是以結合實例來講解。
實例,如下面的截圖,我們要根據A,B列數據的編号彙總一下各個編号的總金額。字典學習到這裡,這個代碼應該是很簡單的了。
下面看我給出的代碼:
Sub mynzsz_79() '第79講 利用字典彙總數據的幾種常見的方式總結
Sheets("79").Select
Set mydic = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(myarr)
'第一種:用item方法
' mydic.Item(myarr(i, 1)) = mydic.Item(myarr(i, 1)) myarr(i, 2)
'第二種:用dic(key)方法
'mydic(myarr(i, 1)) = mydic(myarr(i, 1)) myarr(i, 2)
'第三種:用dic.add方法
If Not mydic.exists(myarr(i, 1)) Then
mydic.Add myarr(i, 1), myarr(i, 2)
Else
'第1種寫法:key寫法
'mydic(myarr(i, 1)) = mydic(myarr(i, 1)) myarr(i, 2)
'第2中:item 寫法
mydic.Item(myarr(i, 1)) = mydic.Item(myarr(i, 1)) myarr(i, 2)
End If
Next
'清空數據區域,回填數據
[e:f].Clear
Range("a1:b1").Copy Range("e1")
Range("e2").Resize(UBound(mydic.Keys) 1, 1) = Application.Transpose(mydic.Keys)
Range("f2").Resize(UBound(mydic.Keys) 1, 1) = Application.Transpose(mydic.Items)
Set mydic = Nothing
End Sub
代碼的截圖:
代碼分析:
1 上述代碼中,我先後共有三種的書寫方法,這三種方法都是實測可以利用的,學習的朋友可以根據自己的需要,或者自己的習慣選擇其中的方法使用。
2 Set mydic = CreateObject("Scripting.Dictionary")
myarr = Range("a1").CurrentRegion.Value
上面的語句是創建字典,把要分析的數據裝入字典,CurrentRegion的含義是返回Range對象,該對象代表當前的區域。當前區域是一個邊緣是任意空行和空列組合成的範圍,要理解這個概念,我在實際使用的時候,會更多的用區域的可控選擇,大家可以在我的代碼中經常看到,如:myarr = Range("a2:b" & Range("a2").End(xlDown).Row)
3 '第一種:用item方法
' mydic.Item(myarr(i, 1)) = mydic.Item(myarr(i, 1)) myarr(i, 2)
上述語句是彙總數據的第一種寫法,利用了鍵值item.
4 '第二種:用dic(key)方法
'mydic(myarr(i, 1)) = mydic(myarr(i, 1)) myarr(i, 2)
上述語句是彙總數據的第二種寫法,更加的直觀,但在字典多重嵌套的時候,看上去和理解起來有些難度了。
5 '第三種:用dic.add方法
If Not mydic.exists(myarr(i, 1)) Then
mydic.Add myarr(i, 1), myarr(i, 2)
Else
'第1種寫法:key寫法
'mydic(myarr(i, 1)) = mydic(myarr(i, 1)) myarr(i, 2)
'第2中:item 寫法
mydic.Item(myarr(i, 1)) = mydic.Item(myarr(i, 1)) myarr(i, 2)
End If
上述語句是第三種寫法是用mydic.Add和第二種方法的結合,理解起來不是很難的。
6 Range("e2").Resize(UBound(mydic.Keys) 1, 1) = Application.Transpose(mydic.Keys)
Range("f2").Resize(UBound(mydic.Keys) 1, 1) = Application.Transpose(mydic.Items)
上述語句回填數據,應用的時候非常的方便。
下面看代碼的運行,是采用第三種方法代碼:
今日内容回向:
1 利用字典在做數據彙總的時候,有哪些方法可以利用?
2 數據回填的時候,還有哪些方法呢?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!