excel篩選重復(fù)姓名 求出Excel中不重復(fù)的人的姓名的VBA代碼,看到標(biāo)題你是不是很興奮,這不就是你想學(xué)習(xí)的知識(shí)嗎?當(dāng)你掌握excel篩選重復(fù)姓名這個(gè)知識(shí)的時(shí)候你一定很興奮,一定不會(huì)后悔看了excel篩選重復(fù)姓名 求出Excel中不重復(fù)的人的姓名的VBA代碼這篇文章的,因?yàn)槟愦_實(shí)把這個(gè)問(wèn)題解決了,不是嗎?
前面的文章我們學(xué)習(xí)了關(guān)于統(tǒng)計(jì)重復(fù)的姓名的問(wèn)題,現(xiàn)在,我們反其道而行之,學(xué)習(xí)一下求出Excel中不重復(fù)的人的姓名的VBA代碼。
當(dāng)然,還是使用VBA中的字典來(lái)處理。假設(shè)有3張工作表,每張表格的A列都是姓名列,所有這些姓名中有些是重復(fù)的,要求編寫(xiě)一段代碼,在另一個(gè)工作表上顯示不重復(fù)的姓名。
使用VBA的話,代碼如下:
Dim i&, Myr&, Arr
Dim d, k, t, Sht As Worksheet
Set d = CreateObject("Scripting.Dictionary")
For Each Sht In Sheets
If Sht.Name <> "Sheet4" Then
Myr = Sht.[a65536].End(xlUp).Row
Arr = Sht.Range("a2:a" & Myr)
For i = 1 To UBound(Arr)
d(Arr(i, 1)) = ""
Next
End If
Next
k = d.keys
Sheet4.[a3].Resize(d.Count, 1) = Application.Transpose(k)
Set d = Nothing
部分代碼解釋?zhuān)?/p>
1、For Each Sht In Sheets :For Each…Next循環(huán)結(jié)構(gòu),這種形式是VBA特有的,用于對(duì)對(duì)象的循環(huán)非常適用。意思是在所有的工作表中依次循環(huán)。
2、If Sht.Name <> "Sheet4" Then :如果這個(gè)工作表的名字不等于”Sheet4”時(shí)執(zhí)行下面的代碼。
3、Myr = Sht.[a65536].End(xlUp).Row :求得這個(gè)工作表A列有數(shù)據(jù)的最后一行的行數(shù),把它賦給變量Myr。這里用了長(zhǎng)整型數(shù)據(jù)類(lèi)型(Long),數(shù)據(jù)范圍最大可到2,147,483,647,是為了避免數(shù)據(jù)很多的時(shí)候會(huì)超出整型數(shù)據(jù)類(lèi)型(Integer)而出錯(cuò),因?yàn)檎蛿?shù)據(jù)類(lèi)型數(shù)據(jù)范圍最大只到32,767。
4、Arr = Sht.Range("a2:a" & Myr) :把A列數(shù)據(jù)賦給數(shù)組Arr。
5、For i = 1 To UBound(Arr) :For…Next循環(huán)結(jié)構(gòu),從1開(kāi)始到數(shù)組的最大上限值之間循環(huán)。Ubound是VBA函數(shù),返回?cái)?shù)組的指定維數(shù)的最大值。
6、d(Arr(i, 1)) = “” :這句代碼的意思就是把關(guān)鍵字Arr(i,1)加入字典,關(guān)鍵字對(duì)應(yīng)的項(xiàng)為空,相當(dāng)于字典中的這個(gè)關(guān)鍵字沒(méi)有解釋。和d.Add Arr(i,1), ""的效果相同,只是代碼更簡(jiǎn)潔一些。
7、k=d.keys :把字典d中存在的所有的關(guān)鍵字賦給變量k。得到的是一個(gè)一維數(shù)組,下限為0,上限為d.Count-1。Keys是字典的方法,前面已經(jīng)講過(guò)了。
8、Sheet4.[a3] .Resize(d.Count, 1) = Application.Transpose(k) :把字典d中所有的關(guān)鍵字賦給表4以a3單元格開(kāi)始的單元格區(qū)域中。