Function getone(Rng As Range, i As Long) Dim arr, d As Object, ar, s Set d = CreateObject("scripting.dictionary") arr = Rng.Value For Each ar In arr If ar <> "" Then d(ar) = "" End If Next s = d.keys If i > UBound(s) + 1 Then getone = "" Else getone = s(i - 1) End IfEnd Function
重複值是Excel當中經常遇到的問題。
下面提供一些關於“單列去重複”的方法。
1、單列去重複的函式合集。上圖中,A列為資料,需要對A列的資料提取不重複值。
從C列開始到I列,都是陣列函式公式,陣列公式使用時需同時在鍵盤上按Ctrl+Shift+Enter三鍵。公式依次為:
=INDEX($A$1:$A$21,SMALL(IF(MATCH(A$2:A$21,A$2:A$21,)=ROW($2:$21)-1,ROW($2:$21)),ROW(A1)))&""=INDEX($A$1:$A$21,MATCH(,COUNTIF(D$1:D1,A$2:A$21),)+1)&""=INDEX($A$1:$A$21,MIN(IF(COUNTIF(E$1:E1,A$2:A$22)=0,ROW($2:$22))))&""=INDIRECT("A"&MIN(IF(COUNTIF(F$1:F1,A$2:A$21)=0,ROW($2:$21))))&""=LOOKUP(,1/(COUNTIF(G$1:G1,A$2:A$21)-1),A$2:A$21)=OFFSET($A$1,MIN(IF(COUNTIF($H$1:H1,$A$2:$A$21)=0,ROW($A$2:$A$21)))-1,)3、高階篩選操作。選擇單元格區域--資料--高階,在彈出的篩選操作框中,勾選將篩選結果複製到其他位置--勾選選擇不重複記錄--再選擇輸出到那個單元格--確定。
4、資料透視表。選擇單元格區域--插入--資料透視表
然後將資料複製--貼上到要引用的地方。
5、自定義函式如果覺得上面的方法都比較麻煩,公式又難於理解,可以使用本人寫的自定義函式。
getone函式有兩個引數
引數1:為要去重複的單元格區域,區域中如果有空白單元格將忽略處理。
引數2:為整數,1表示引數1單元格區域中第一個去重複的資料;2表示第2個.....
該函式也支援多列去重。
參考程式碼如下,可複製程式碼,然後在Excel中的VBE編輯器中新建模組,放入程式碼,即可使用。
文字程式碼如下:
Function getone(Rng As Range, i As Long) Dim arr, d As Object, ar, s Set d = CreateObject("scripting.dictionary") arr = Rng.Value For Each ar In arr If ar <> "" Then d(ar) = "" End If Next s = d.keys If i > UBound(s) + 1 Then getone = "" Else getone = s(i - 1) End IfEnd Function以上,大都是單列去重複的函式和技巧。
如題主能提供更加具體的參考,能更好地解決問題。
僅供參考。