位置:首頁 > 軟件操作教程 > 辦公軟件 > Excel > 問題詳情

求出Excel中不重復的人的姓名的VBA代碼

提問人:周麗平發(fā)布時間:2021-08-25

假設有3張工作表,每張表格的A列都是姓名列,所有這些姓名中有些是重復的,要求編寫一段代碼,在另一個工作表上顯示不重復的姓名。

使用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

部分代碼解釋:

1、For Each Sht In Sheets :For Each…Next循環(huán)結構,這種形式是VBA特有的,用于對對象的循環(huán)非常適用。意思是在所有的工作表中依次循環(huán)。

2、If Sht.Name <> "Sheet4" Then :如果這個工作表的名字不等于”Sheet4”時執(zhí)行下面的代碼。

3、Myr = Sht.[a65536].End(xlUp).Row :求得這個工作表A列有數(shù)據(jù)的最后一行的行數(shù),把它賦給變量Myr。這里用了長整型數(shù)據(jù)類型(Long),數(shù)據(jù)范圍最大可到2,147,483,647,是為了避免數(shù)據(jù)很多的時候會超出整型數(shù)據(jù)類型(Integer)而出錯,因為整型數(shù)據(jù)類型數(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)結構,從1開始到數(shù)組的最大上限值之間循環(huán)。Ubound是VBA函數(shù),返回數(shù)組的指定維數(shù)的最大值。

6、d(Arr(i, 1)) = “” :這句代碼的意思就是把關鍵字Arr(i,1)加入字典,關鍵字對應的項為空,相當于字典中的這個關鍵字沒有解釋。和d.Add Arr(i,1), ""的效果相同,只是代碼更簡潔一些。

7、k=d.keys :把字典d中存在的所有的關鍵字賦給變量k。得到的是一個一維數(shù)組,下限為0,上限為d.Count-1。Keys是字典的方法,前面已經(jīng)講過了。

8、Sheet4.[a3] .Resize(d.Count, 1) = Application.Transpose(k) :把字典d中所有的關鍵字賦給表4以a3單元格開始的單元格區(qū)域中。

繼續(xù)查找其他問題的答案?

回復(0)
返回頂部