我同意你的問題的所有意見。 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
什麼是您的最終意圖是什麼?要在其他地方使用數據?如果是這樣,我會建議使用數組。我沒有做太多與Range對象,但基於微軟文檔上,一系列目標僅是指一個地區在文檔中並沒有真正分開存儲從該區域中的數據(這裏找到:https://開頭MSDN。 microsoft.com/en-us/library/office/ff835176.aspx) –
如果您需要跟蹤的東西,你不應該使用'selection'。使用另一個'range'對象。 – Kyle
你的帖子中有些奇怪或缺失。它不應該改變選擇,除非當前的選擇是受影響的範圍本身的一部分。 –