tft每日頭條

 > 科技

 > vba字典入門教程

vba字典入門教程

科技 更新时间:2024-09-08 10:18:53

大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第79講内容:利用字典彙總數據的幾種常見方法總結。

利用字典彙總并提取數據,是我們經常要用到的,利用字典排重性可以很方便得到一個主鍵不重複的數據彙總,在以往的各個章節中,我利用了各種方法達到這個目的,今日我就這個問題做一個總結,看看利用字典彙總數據的時候,都有哪些基本的方法,代碼如何書寫,還是以結合實例來講解。

實例,如下面的截圖,我們要根據A,B列數據的編号彙總一下各個編号的總金額。字典學習到這裡,這個代碼應該是很簡單的了。

vba字典入門教程(利用VBA字典彙總數據)1

下面看我給出的代碼:

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

代碼的截圖:

vba字典入門教程(利用VBA字典彙總數據)2

代碼分析:

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)

上述語句回填數據,應用的時候非常的方便。

下面看代碼的運行,是采用第三種方法代碼:

vba字典入門教程(利用VBA字典彙總數據)3

今日内容回向:

1 利用字典在做數據彙總的時候,有哪些方法可以利用?

2 數據回填的時候,還有哪些方法呢?

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved