excel去重複


http://club.excelhome.net/thread-888978-2-1.html


以下是樓主的方法1:

  1. Sub 矩形1_Click()
  2.     i = Range("A65536").End(xlUp).Row
  3.     For s = 1 To i
  4.         For ss = i To s + 1 Step -1
  5.             If Cells(ss, 1) = Cells(s, 1) Then
  6.             Cells(ss, 1).Delete shift:=xlUp
  7.             End If
  8.         Next ss
  9.     Next s
  10. End Sub
複製代碼

感覺與我常用的數組去重是一樣的(我是通過兩層循環判斷比較,重複的清爲空值,但是我的做法中,對於後面遇到的空值會跳過,提高運行效率,樓主的,在最後幾個單元格會無意義的跑空……),不過,巧妙的是利用了單元格刪除後,後面單元格自動上移一格的特點,在內存數組中相當於是把元素前趕了一個位置,如此,不需要另行清除空值了……




樓主方法二:

  1. Sub 矩形2_Click()
  2.     i = Range("A65536").End(xlUp).Row
  3.     For s = i To 1 Step -1
  4.         If Application.WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(s, 1)), Cells(s, 1)) > 1 Then
  5.             Cells(s, 1).Delete shift:=xlUp
  6.         End If
  7.     Next
  8. End Sub
複製代碼
函數思維,巧妙利用了單元格刪除上移,只需要一個從下往上的單層循環即可,沒有跑空……但是每次操作單元格,尤其在循環內部,是效率低的原因吧……


樓主方法三:

  1. Sub 矩形3_Click()
  2.     i = Range("A65536").End(xlUp).Row
  3.     Dim dic As Object, ii&, arr, ra
  4.     Set dic = CreateObject("Scripting.Dictionary")
  5.     arr = Range("a1:a" & i)
  6.     For ii = 1 To UBound(arr)
  7.         ra = dic(arr(ii, 1))
  8.     Next
  9.     Range("a:a").ClearContents
  10.     Range("a1").Resize(dic.Count, 1) = Application.Transpose(dic.Keys)
  11. End Sub
複製代碼



樓主方法四:
  1. Sub 矩形4_Click()
  2. Columns(1).RemoveDuplicates 1
  3. End Sub
複製代碼
咋一看,嚇一跳,如此簡潔,趕緊F1,才稍稍明白了些真相:
“Excel 開發人員參考
Range.RemoveDuplicates 方法
從值區域中刪除重複的值。
版本信息
已添加版本:  Excel 2007

語法

表達式.RemoveDuplicates(Columns, Header)

表達式   一個代表 Range 對象的變量。

參數

名稱 必選/可選 數據類型 說明
Columns 可選 Variant 包含重複信息的列的索引數組。如果沒有傳遞任何內容,則假定所有列都包含重複信息。
Header 可選 XlYesNoGuess 指定第一行是否包含標題信息。xlNo 是默認值;如果希望 Excel 確定標題,則指定 xlGuess。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章