Выборка уникальных значений из диапазона ячеек

Функция UniqueValues возвращает коллекцию, содержащую уникальные непустые значения из диапазона ячеек (или массива)

Function UniqueValues(ByVal arr) As Collection
    ' функция получает в качестве параметра массив любой размерности
    ' возвращает коллекцию уникальных НЕПУСТЫХ значений
    Set UniqueValues = New Collection: On Error Resume Next
    For Each v In arr
        v = Trim(v): If Len(v) Then UniqueValues.Add CStr(v), CStr(v)
    Next v
End Function
 
 
Sub ПримерИспользования_UniqueValues()
    For Each v In UniqueValues([a3:b6500].Value)
        Debug.Print v
    Next
End Sub

Если же требуется найти уникальные значения в массиве из нескольких столбцов, или получить результат (уникальные значения) в виде массива (для последующей записи на лист, или в элемент управления типа ComboBox или ListBox), то используйте функцию UniqueValuesFromArray:
http://excelvba.ru/code/UniqueValuesFromArray

(добавлено)
Если диапазон состоит из нескольких несмежных диапазонов - то используйте такую функцию:

Function UniqueValuesFormRange(ByVal ra As Range) As Collection
    ' функция получает в качестве параметра диапазон ячеек
    ' возвращает коллекцию уникальных НЕПУСТЫХ значений
    Set UniqueValuesFormRange = New Collection: On Error Resume Next
    Dim ar As Range
    For Each ar In ra.Areas
        For Each v In ar.Value
            v = Trim(v): If Len(v) Then UniqueValuesFormRange.Add CStr(v), CStr(v)
        Next v
    Next ar
End Function

Пример её использования:

Sub ПримерИспользования_UniqueValuesFormRange()
    For Each v In UniqueValuesFormRange(Selection)
        Debug.Print v
    Next
End Sub

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

удалите в коде вот это:

If Len(v) Then

Подскажите как поменять код чтобы в том числе пустые значения считались за значения и выводились? Если в диапазоне есть пустые значения, то чтобы одно пустое значение выводилось тоже.

такая же фигня, как и первого коммента, UniqueValuesFormRange не понятно как пользоваться, и выдает ошибку ....

Как это использовать? Я скопировал код в созданный модуль VBA, потом, через пользовательские функции запускаю функцию, выделяю диапазон массива, жму ввод и получаю облом в виде #ЗНАЧ!

Спасибо! Очень помогло!

Дольше искал в хелпе, куда возвращает список )
Вы съэкономили мне сутки жизни.
Благодарю.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
  _   _              _                  _      ___ 
| | | | __ __ __| | _ __ ___ / \ |_ _|
| |_| | \ \/ / / _` | | '_ ` _ \ / _ \ | |
| _ | > < | (_| | | | | | | | / ___ \ | |
|_| |_| /_/\_\ \__,_| |_| |_| |_| /_/ \_\ |___|
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.