返回列表 上一主題 發帖

[轉貼] 討論不重複清單

回復 20# ANGELA
謝謝 ANGELA
已經解決問題了

TOP

回復 17# gong

感謝 gong 大大, 又學到一種方法.

不過用動態範圍要比用 MAX 更有效率.

數據在A欄

加輔助欄I, J
I2 =COUNTIF(OFFSET($A2,,,COUNTA(A:A)-1,),A2)
J1 = 0
J2 =MATCH(1,OFFSET($I$2,J1,,COUNTA(A:A)-1,),0)+J1
下拉

不重覆數據
K2 = IFERROR(INDEX(A:A,J2+1),"")
下拉

====================================
用字典法寫了VBA Function UNIQUEp

N2=IFERROR(UNIQUEp(A:A,ROW()),"")
下拉

不知哪位大大可否寫一段code來計算一下各種方法所需的計算時間
  1. Function UNIQUEp(source As Range, num As Integer)
  2.     Dim newArray, myArray As Variant
  3.     rows_num = source.Rows.Count
  4.     'myArray = Range(Cells(source.Row, source.Column), Cells(source.Row + rows_num - 1, source.Column)).Value
  5.     myArray = Sheets(source.Parent.Name).Range(source.Address).Value
  6.    
  7.     Set Dic = CreateObject("scripting.dictionary")
  8.     For i = 1 To rows_num
  9.     If myArray(i, 1) <> "" Then
  10.         Dic((myArray(i, 1))) = ""
  11.     End If
  12.     Next
  13.    
  14.     arr = Dic.Keys
  15.    
  16.     UNIQUEp = arr(num - 1)
  17. End Function
複製代碼
不重複清單 Sonny.rar (20.05 KB)
ss

TOP

本帖最後由 sunnyso 於 2013-4-30 23:50 編輯

回復 11# Hsieh
回復 13# gong

剛剛想到另一種方法不用 MAX, LARGE 等陣列函數和動態範圍的方法, (本來以爲MAX, LARGE等陣列函數的效率較低), 不過好像還是動態範圍有效率

數據在A欄

加輔助欄O
O1 = 0
O2 = IF(COUNTIF(A$2:A2,A2)=1,((8*SUM(L$1:L1)+1)^0.5-1)/2+1,"")
下拉

不重覆數據
P2 = INDEX(A:A,MATCH(ROW(A1),O:O,0))
下拉

真的想知道哪種方法最有效率. 請大大寫一段code來計算一下各種方法所需的計算時間
不重複清單 Sonny V2.rar (21.03 KB)
ss

TOP

        靜思自在 : 發脾氣是短暫的發瘋。
返回列表 上一主題