2015-12-16 20 views
1

我有一個包含從一個選擇的唯一的列數據的範圍對象。我想在此範圍對象上使用RemoveDuplicates方法以獲取唯一值。我的問題是:工作表上的選擇也被RemoveDuplicates方法更改。我只需要改變範圍對象。這裏是我的代碼:「RemoveDuplicates」方法改變選擇,不僅Range對象

Dim rngTst As Excel.Range 
Set rngTst = Range(Cells(2, 1), Cells(65000, 1)) 
With rngTst 
    .RemoveDuplicates 1, xlYes 'remove duplicated values 
End With 
+0

什麼是您的最終意圖是什麼?要在其他地方使用數據?如果是這樣,我會建議使用數組。我沒有做太多與Range對象,但基於微軟文檔上,一系列目標僅是指一個地區在文檔中並沒有真正分開存儲從該區域中的數據(這裏找到:https://開頭MSDN。 microsoft.com/en-us/library/office/ff835176.aspx) –

+2

如果您需要跟蹤的東西,你不應該使用'selection'。使用另一個'range'對象。 – Kyle

+1

你的帖子中有些奇怪或缺失。它不應該改變選擇,除非當前的選擇是受影響的範圍本身的一部分。 –

回答

1

我同意你的問題的所有意見。 Range對象不適合您的任務。這是很容易認爲一些Excel函數可以簡單地在宏轉載,但在VBA通常有做...,避免Activate/Select在識別VBA的通用性的第一步的更好的方法。

如果只是通過獨特的值列表需要循環,並以某種方式處理它們,那麼Collection對象將是您理想的選擇,因爲每個鍵必須是唯一的,並且從Worksheet在外打工會大大快於您。

下面是一些代碼,說明它是多麼簡單從Range對象採取的值,並從他們創造一個獨特的名單。

Dim uniques As Collection 
Dim r As Long 
Dim v As Variant 

'Read the values 
With ThisWorkbook.Worksheets("Sheet1") 'adjust to your sheet name 
    v = .Range(.Cells(2, 1), .Cells(65000, 1)).Value2 
End With 

'Populate the unique collection 
Set uniques = New Collection 
On Error Resume Next 
For r = 1 To UBound(v, 1) 
    uniques.Add v(r, 1), CStr(v(r, 1)) 
Next 
On Error GoTo 0 

'Loop through your values 
For Each v In uniques 
    'do something with your values 
    Debug.Print v 
Next 
+0

我對Collections不是很熟悉,所以我沒有這個想法......我會嘗試這種方法。非常感謝。 –

+0

你的解決方案是完美的。我設法使用集合來完成這項工作。非常感謝你和所有幫助我的人。 –