“RemoveDuplicates”方法更改select,而不仅仅是Range对象

我有一个Range对象,其中包含来自select的唯一列的数据。 我想在这个范围对象上使用RemoveDuplicates方法来获得唯一的值。 我的问题是:工作表上的select也被RemoveDuplicates方法更改。 我只需要范围对象进行更改。 这是我的代码:

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

我同意你的问题的所有意见。 Range对象不适合你的任务。 很容易想到,某些Excel函数可以简单地在macros中复制,但在VBA中通常有更好的方法来实现它,而避免Activate / Select是识别VBA多function性的第一步。

如果你只需要遍历一个唯一值列表并以某种方式处理它们,那么一个Collection对象对你来说将是理想的,因为每个键都必须是唯一的,远离Worksheet对于你来说会快得多。

下面是一些代码,显示了从Range对象获取值以及从中创build一个唯一的列表是多么的简单。

 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