Обычно я использую объект словаря для проверки дубликатов или его использования. Словарь - это объект, который ссылается на уникальные ключи к значениям. Поскольку ключи должны быть уникальными, он вполне может использоваться для сбора уникальных значений. Может быть, это не самый эффективный способ памяти, а probaby немного уклоняется от объекта, но он работает очень хорошо. Вы должны затушить объект и установить его в словарь, собрать данные, после проверки его еще не существует, а затем прокрутите словарь, чтобы получить значения.
Dim i As Long
Dim searchItem As Variant, var as variant
dim dicUniques as object
set dicUniques = CreateObject("Scripting.Dictionary")
strSearch = ""
searchItem = ""
strFile = "...\Desktop\xl files min\src.xlsm"
Set s_wbk = Workbooks.Open(strFile)
With s_wbk.Worksheets("Sheet1")
For i = 1 To Rows.Count
If Not IsEmpty(Cells(i, 1).Value) Then
if dicUniques.exists(cells(i,1).value) = false then
dicUniques.add cells(i,1).value, cells(i,1).value
end if
End If
Next i
End With
s_wbk.Close
for each var in dicUniques.keys
strSearch = strSearch & ", " & var
next var
searchItem = Split(strSearch, ",")
Это быстрое и грязное решение. Поскольку ключи уникальны, вы, вероятно, можете использовать их сами, не помещая их вместе в строку сначала. Кстати: Прежде всего, вы указываете, какие ячейки вы используете. Иногда вы начинаете макрос формировать другой рабочий лист, а затем он будет использовать ячейки там, если родительский лист не указан для объекта cell. Во-вторых, важно указать, что вы хотите использовать значение ячеек для словаря, поскольку объект словаря может содержать что угодно. Поэтому, если вы не используете ячейки (x, y) .value, объект будет содержать сама ячейка.
Редактировать: Исправлена опечатка в рутине.
Смотри, например, [Это] (http://stackoverflow.com/questions/3017852/vba-get-unique-values-from-array). – dee