В зависимости от того, какую версию Excel вы используете, вы можете использовать некоторые встроенные функции Excel для получения желаемого — все решение зависит от вашего уровня навыков работы с VBA.
Excel 2003:
Вы можете использовать метод Advancedfilter
(документация) вашего диапазона, чтобы получите уникальные значения и скопируйте их в целевую область. Пример:
With ActiveSheet
.Range("A1", .Range("A1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("B1"), Unique:=True
End With
Где B1
— это первая ячейка столбца, в который вы хотите скопировать уникальные значения. Единственная проблема с этим методом заключается в том, что первая строка исходного столбца («A1») будет скопирована в целевой диапазон, даже если она дублируется. Это связано с тем, что метод AdvancedFilter предполагает, что первая строка является заголовком.
Таким образом, добавив дополнительную строку кода, мы имеем:
With ActiveSheet
.Range("A1", .Range("A1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("B1"), Unique:=True
.Range("B1").Delete Shift:=xlShiftUp
End With
Excel 2007/2010:
Вы можете использовать тот же метод, что и выше, или использовать метод RemoveDuplicates
(документация). Это похоже на метод AdvancedFilter, за исключением того, что RemoveDuplicates
работает на месте, что означает, что вам нужно создать дубликат исходного столбца, а затем выполнить фильтрацию, например:
With ActiveSheet
.Range("A1", .Range("A1").End(xlDown)).Copy Destination:=.Range("B1")
.Range("B1", .Range("B1").End(xlDown)).RemoveDuplicates Columns:=1, Header:=xlNo
End With
Последний параметр Header
определяет, копируется ли первая ячейка исходных данных в место назначения (если для него установлено значение true, то метод аналогичен методу AdvancedFilter).
Если вам нужен «более чистый» метод, вы можете использовать VBA Collection
или dictionary
- я уверен, что кто-то еще предложит решение с этим.
person
i_saw_drones
schedule
06.08.2012