Найти тему
VBA Excel с нуля

VBA Excel № 166. Как заполнить ListBox уникальными значениями на VBA

Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука
Анонс и файл-пример был выставлен на моём телеграмм-канале пару дней назад. Приятно, что читатели уже заранее скачивают пример.

Иногда при работе с данными нам нужно отобразить в элементе управления ListBox только уникальные значения из существующего списка. Например, у нас есть столбец с данными в котором указаны имена людей, и они повторяются. Нам нужно заполнить ListBox уникальными именами, исключив повторы.

Использование коллекции для удаления дубликатов

Для этой задачи отлично подходит объект Collection. Коллекция позволяет хранить уникальные элементы и предотвращает добавление дубликатов. В этой статье мы попробуем разобраться, как реализовать это на VBA.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

📌 Скачать файл пример, можно в конце статьи.

Что такое Collection?

Коллекция — это структура данных, которая позволяет хранить набор элементов и получать к ним доступ с использованием уникальных ключей. Элементы в объект Collection добавляются с помощью следующей инструкции:

объект.Add элемент, ключ, до, после

где:

  • элемент — добавляемый объект.
  • ключ — уникальная текстовая строка для доступа к элементам коллекции (может быть пропущен).
  • до и после — параметры, определяющие позицию вставки элемента (не обязательны).

Если при добавлении элемента в коллекцию указать неуникальный ключ, произойдет ошибка, и элемент не будет добавлен. Именно этим поведением мы и воспользуемся для создания коллекции с уникальными элементами.

Процедура начинается с создания нового объекта Collection, который называется УникальныеЭлементы. Диапазон (созданный мной «A2: A655») под названием ИМЕНА содержит список элементов, среди которых есть повторяющиеся (создание именованных диапазонов в более ранних статьях).

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Код проходит по ячейкам диапазона в цикле, добавляя в коллекцию УникальныеЭлементы только уникальные значения. Значение каждой ячейки (преобразованное в строку) используется в качестве ключа. Оператор On Error Resume Next позволяет VBA игнорировать ошибки, возникающие при попытке добавить в коллекцию дублирующийся ключ. Если возникает ошибка, элемент не добавляется, что соответствует нашей цели. Затем процедура передает уникальные элементы из коллекции в элемент управления ListBox. В форме UserForm1 также содержатся две надписи, указывающие количество уникальных элементов в коллекции и общее количество элементов.

Макрос выглядит следующим образом (в коде есть пояснения):

Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука

В модуле формы на кнопе «Ок» пропишем следующий код:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

При выборе элемента ListBox и нажатии Ок выходит сообщение:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Когда писал статью, все имена в диапазоне были по алфавиту. Чтобы перемешать значения есть макрос ПеремешатьИмена, который бонусом находится в файл-примере в модуле1. Можете его подстроить под свои нужды.

✔ На моём телеграмм-канале можно СКАЧАТЬ ФАЙЛ ПРИМЕР

СКАЧАТЬ ФАЙЛ ПРИМЕР с Яндекс Диска