检查一列数据的重复项 vba_提取重复值,但字典不是重点。
本例的問題描述:
1:源數(shù)據(jù)與提取的結(jié)果在同一個工作表里面;
2:提取K、M、O、Q列里面不重復(fù)的數(shù)據(jù)(注意,數(shù)據(jù)列里面有空白的行);
3:把提取出來的結(jié)果放在A2單元格的下方,不能有空白行;
源數(shù)據(jù)及目標(biāo)結(jié)果如下:
解決的思路詳解:
1:由于K、M、O、Q四列不連續(xù),且中間還有數(shù)據(jù)(在截圖的時候,中間的數(shù)據(jù)刪除了,實(shí)際運(yùn)用的時候,是有數(shù)據(jù)的)還有空白的單元格出現(xiàn)。所以arr = sht.Range("a1").CurrentRegion這種方法就不適用了;
2:獲取一列的最后一個非空單元行,再用Range“K1:K100”)類似這樣的方式來獲取列的區(qū)域了;
3:由于四列的不連續(xù),所以循環(huán)需要一點(diǎn)小的技巧,詳見后續(xù)的代碼;
4:提取不重復(fù)的值,相信看過之前的文章都知道,要用到字典了;
代碼運(yùn)行的結(jié)果如下:
代碼如下:
Sub test()
Dim arr, col, i, j, dic
Set dic = CreateObject("scripting.dictionary")
col = Split("K m o q")
For i = 0 To UBound(col)
arr = Range(col(i) & "1").Resize(Cells(Rows.Count, col(i)).End(xlUp).Row)
For j = 3 To UBound(arr, 1)
If Len(arr(j, 1)) Then dic(arr(j, 1)) = j
Next j, i
[a2].Resize(dic.Count).ClearContents
[a2].Resize(dic.Count) = Application.Transpose(dic.keys)
End Sub
代碼解析
1:2行 定義變量;
2:3行 后期綁定字典;
3:4行 把四列不連續(xù)的只放入col數(shù)組;
4:5~6行 遍歷col數(shù)組,獲取最后一列的非空單元格之后,與第一列的區(qū)域,賦值給arr數(shù)組;
5:7行 遍歷arr數(shù)組;
6:8行 用len判斷單元格的類容是否為非空,把不是空的單元格放入字典d;
7:10行 清除指定區(qū)域的內(nèi)容;
8:11行 把結(jié)果賦值給指定的區(qū)域;
本例思考:
1:本例思維兩點(diǎn),是把不連續(xù)的列數(shù)據(jù),用循環(huán)來提取。
小結(jié):
解決本問題,需要用的知識點(diǎn):
1:字典的經(jīng)典運(yùn)用;
2:split函數(shù)
延伸閱讀:
Excel VBA 數(shù)組公式Split 和Join
Excel VBA 字典的常用方式
Excel VBA 字典入門key和item
Excel VBA 按照要求提取數(shù)據(jù),數(shù)據(jù)及字典法
點(diǎn)擊關(guān)注可以更方便的查看Excel VBA的案例文章
私信 視頻 可以獲取54集VBA入門視頻
私信 VBA或 vba 可以獲取文章中含VBA代碼的Excle文件
總結(jié)
以上是生活随笔為你收集整理的检查一列数据的重复项 vba_提取重复值,但字典不是重点。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UML图概述
- 下一篇: Libevent详细说明