По сути, вы пытаетесь сделать что-то под названием Расширенный фильтр .Однако ваш код нуждается в некотором улучшении всех опций выбора (как указано в комментариях).Вот пример макроса, в котором есть несколько компонентов, которые вам понадобятся для того, что вы пытаетесь сделать, например:
- . Он динамически фиксирует диапазон всех заполненных ячеек слева и внизу ячейки.
F6
. - Использует зеленый диапазон в качестве фильтра (если не оставить поле F3: H3 пустым)
- Вставляет значения, начиная с ячейки
A1
, с динамическим числом столбцов на основеколичество столбцов данных. - Исключая дубликаты с использованием
Unique:=True
(только один дубликат в выборке)
Перед макросом
После макроса
Код, использованный на иллюстрации выше.
Sub exampleRefresh()
Dim cRng As Range, WS As Worksheet
Set WS = ActiveSheet
With WS
Set cRng = Sheet1.Range("F6")
Set cRng = Range(cRng, cRng.End(xlToRight))
Set cRng = Range(cRng, cRng.End(xlDown))
Dim fRng As Range
Set fRng = WS.Range("F2:H3")
Dim PRNG As Range
Set PRNG = WS.Range("A1")
Set PRNG = Range(PRNG, PRNG.Offset(, cRng.Columns.Count - 1))
End With
cRng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=fRng, CopyToRange:=PRNG, Unique:=True
End Sub
Также как тизерMicrosoft собирается развернуть новую функцию Spill .С помощью этой функции, если вы хотите перечислить различные значения столбца, вы можете использовать формулу, например =Unique(A:A)
, в любой ячейке, и это создаст отдельный список.Нет необходимости в VBA или чрезмерном нажатии!