首页
/
每日頭條
/
科技
/
vba字典入門教程
vba字典入門教程
更新时间:2025-06-18 16:28:32

大家好,今日我們繼續講解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 數據回填的時候,還有哪些方法呢?

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
如何自己搭建一個完整的網站
如何自己搭建一個完整的網站
為了在自己網站搭建的過程中有更多的方向和目标,更全面的計劃,并提前準備一些素材,以便在網站搭建中有更多的方向和目标。那麼怎麼自己建網站?自己建網站你需要注意哪些具體點?1、網站搭建結構合理網站搭建結構要合理,層級不要過深,不要有空白層級,樹...
2025-06-18
畫井蓋的
畫井蓋的
畫井蓋的?2月1日,河南商丘睢陽區包公廟鄉姜油莊村,小夥姜亮在自家門口的水泥地上,用拖把曆時倆小時畫出30米巨龍,引來許多村民圍觀姜亮說,自己平時喜歡畫畫,在村裡牆上畫過很多畫,希望自己村莊更加美麗更有藝術感選擇大年初一畫這條龍,是希望新的...
2025-06-18
碳酸鈉泡沫滅火器原理公式
碳酸鈉泡沫滅火器原理公式
碳酸鈉泡沫滅火器原理公式?1.情境引入,初識滅火器,今天小編就來說說關于碳酸鈉泡沫滅火器原理公式?下面更多詳細答案一起來看看吧!碳酸鈉泡沫滅火器原理公式1.情境引入,初識滅火器任務1:課前興趣小組實踐活動—走進消防支隊,感受消防隊員的工作,...
2025-06-18
手機後面的指環怎麼去掉
手機後面的指環怎麼去掉
手機後面的指環怎麼去掉?先用吹風機熱風檔預熱一下用張小卡片,插進去,接着一邊用吹風機吹,下面我們就來聊聊關于手機後面的指環怎麼去掉?接下來我們就一起去了解一下吧!手機後面的指環怎麼去掉先用吹風機熱風檔預熱一下。用張小卡片,插進去,接着一邊用...
2025-06-18
性能穩定的拍照手機
性能穩定的拍照手機
現在,您的手機就是您随身攜帶的相機。如果你幾年沒有升級它,你應該會對當今手機攝像頭性能(尤其是低光圖像質量)的提升感到驚喜。事實上,曾經紅火一時的數碼相機已經沒人再用,隻要你手中有一部好的拍照手機。看到這些單反、無反會瑟瑟發抖嗎?但并非所有...
2025-06-18
Copyright 2023-2025 - www.tftnews.com All Rights Reserved