2013-12-23 5 views
0

Я просмотрел множество статей, которые фильтруют уникальные значения; однако почти все они копируют в новое местоположение/цикл через весь столбец вручную, который я бы хотел избежать.Как получить список уникальных значений из столбца в Excel VBA?

Мое требование состоит в том, чтобы отделить строки от одного столбца в отдельных книгах, основываясь на значении ячейки столбца G2 (например, «Все дома, все квартиры, все квартиры и т. Д.» В отдельных файлах). Я пытаюсь использовать AdvancedFilter в Excel VBA для извлечения каждого уникального значения в массив, а затем повторять эти уникальные значения, находя все соответствующие значения столбцов. Я не понимаю, как работает AdvancedFilter.

xlFilterCopy вместе с copyToRange копирует список уникальных значений в указанный диапазон.

Как работает xlFilterValues ​​в мире? В ссылке говорится, что xlFilterValues ​​«фильтрует данные на месте». Но как мне получить эти ценности? Возвращает ли он какой-то объект? В отладке это, похоже, дает мне логическое значение!

Почему это так странно задокументировано! Спасибо за помощь людям.

PS: Если у вас есть лучший способ сделать то, что мне нужно без усовершенствованного фильтра, пожалуйста, дайте мне знать.

With sheet 
.Range(orgLevelLetter & "2", .Cells(.Rows.Count, orgLevelLetter).End(xlUp)).AdvancedFilter xlFilterInPlace, , , True 
End With 
+0

https://sites.google.com/a/madrocketscientist.com/jerrybeaucaires-excelassistant/parse-functions/ листы 1-к-листы могут представлять интерес. – pnuts

ответ

1

Вы получаете значения, потому что вы указали CopyToRange, поэтому вы знаете, где значения пошли. Итак, что бы вы ни использовали в качестве ссылки для этого, вы теперь используете, чтобы манипулировать им.

Если вы не хотите использовать CopyToRange, тогда значения возвращаются вызовом, потому что AdvancedFilter возвращает объект диапазона. Поэтому вы, вероятно, захотите присвоить свой оператор .Range тому диапазону, который вы уже инициализировали.

Альтернативный способ сделать это было бы использовать с утверждением так:

With sheet.Range(orgLevelLetter & "2", _ 
    .Cells(.Rows.Count,orgLevelLetter).End(xlUp)).AdvancedFilter(xlFilterInPlace, , , True) 

<content here> 

End With 
+0

Звучит примерно так, как показано в инструкции «С». Но в примере, который я написал, я не использовал copyToRange, и он все равно не вернул мне объект диапазона. Я вообще не использовал AdvancedFilter, вместо этого я открыл новую книгу Excel для каждого уникального значения, существовавшего в этом столбце, и скопировал существующую строку в эту новую книгу. В конце я закрыл все книги! Кажется неэффективным для большого количества различных значений, которые я знаю, но поскольку их всего лишь несколько, он делает простейший код. –

Смежные вопросы