字典(Dictionary)是一種通過(guò)鍵(key)和項(xiàng)(item)(注:鍵和項(xiàng)是字典中的術(shù)語(yǔ))存儲(chǔ)唯一項(xiàng)的方法。它是一種基于唯一鍵存儲(chǔ)數(shù)據(jù)的極好工具,它的強(qiáng)大之處在于可以使用鍵來(lái)存儲(chǔ)和合并數(shù)據(jù)。在本文中,講解如何在字典中捕獲一個(gè)單元格區(qū)域并將其引用回Excel。這里,將存儲(chǔ)一個(gè)10行的單元格區(qū)域,然后只輸出該區(qū)域中唯一的項(xiàng)目。示例如下圖1所示。獲取其數(shù)據(jù)區(qū)域,使用字典將數(shù)據(jù)存儲(chǔ),然后使用VBA數(shù)組提取我們選擇需要獲取唯一值的列。設(shè)置字典非常簡(jiǎn)單:可以直接創(chuàng)建字典對(duì)象,而無(wú)需引用Microsoft
Scripting Runtime。下面的代碼創(chuàng)建字典引用:With
CreateObject('Scripting.Dictionary')另一種方式是,在VBE中單擊“工具-引用”命令,在“引用”對(duì)話框中,勾選“Microsoft
Scripting Runtime”前的復(fù)選框,如下圖2所示。下面的VBA代碼從數(shù)據(jù)單元格區(qū)域中生成唯一數(shù)據(jù)。它將從數(shù)組的當(dāng)前區(qū)域獲取數(shù)據(jù),并將數(shù)據(jù)匯總到一個(gè)唯一值列表中,輸出到所選擇的單元格區(qū)域內(nèi)。 ar = [A1].CurrentRegion.Value With
CreateObject('Scripting.Dictionary') .Item(ar(i, 1)) = .Item(ar(i, 1)) +
ar(i, 3) ar = Array(.keys, .items) Sheet3.[A1].Resize(.Count, 2) =
Application.Transpose(ar)將單元格區(qū)域推送到一個(gè)名為(ar)的數(shù)組中,該數(shù)組存儲(chǔ)所有數(shù)據(jù)。然后,一個(gè)簡(jiǎn)單的For循環(huán)遍歷數(shù)組中的數(shù)據(jù)。.Item行允許引用數(shù)組(ar),并將唯一數(shù)據(jù)放入字典中。.Item(ar(i,
1)) = .Item(ar(i, 1)) + ar(i, 3)當(dāng)循環(huán)完成后,所要做的就是將數(shù)據(jù)從字典中提取到想要的位置。使用以下代碼將數(shù)據(jù)返回?cái)?shù)組:ar
= Array(.keys, .items)最后,將輸出數(shù)據(jù)的單元格區(qū)域調(diào)整為與保存字典的數(shù)組相同的大小。Sheet3.[A1].Resize(.Count,
2) = Application.Transpose(ar)這里將數(shù)據(jù)輸出工作表Sheet3的單元格A1,并從該起始點(diǎn)調(diào)整區(qū)域大小。如果想要輸出不同列的唯一值,可以使用代碼。例如,將第1列:.Item(ar(i, 1)) = .Item(ar(i, 1)) + ar(i, 3).Item(ar(i, 2))
= .Item(ar(i, 2)) + ar(i, 3)注:本文學(xué)習(xí)整理自thesmallman.com,有興趣的朋友可以到原網(wǎng)站學(xué)習(xí)?;蛘叩街R(shí)星球App完美Excel社群下載本文示例工作簿。歡迎到知識(shí)星球:完美Excel社群,進(jìn)行技術(shù)交流和提問(wèn),獲取更多電子資料,并通過(guò)社群加入專門(mén)的微信討論群,更方便交流。
|