Функция 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
Комментарии
удалите в коде вот это:
Подскажите как поменять код чтобы в том числе пустые значения считались за значения и выводились? Если в диапазоне есть пустые значения, то чтобы одно пустое значение выводилось тоже.
такая же фигня, как и первого коммента, UniqueValuesFormRange не понятно как пользоваться, и выдает ошибку ....
Выложил пример в статье Извлечение уникальных значений из диапазона ячеек или массива
Как это использовать? Я скопировал код в созданный модуль VBA, потом, через пользовательские функции запускаю функцию, выделяю диапазон массива, жму ввод и получаю облом в виде #ЗНАЧ!
Спасибо! Очень помогло!
Дольше искал в хелпе, куда возвращает список )
Вы съэкономили мне сутки жизни.
Благодарю.
Отправить комментарий