Найти тему

📌 Как создать зависимый выпадающий список при помощи VBA: пример решения

Оглавление

Всем привет! 👋

Сегодня в уроке рассмотрим, как создавать зависимые выпадающие списки в Excel с помощью VBA и предоставим готовый пример решения, который вы сможете легко адаптировать для своих нужд.

Пример решения будет доступен для загрузки, и мы дадим подробные инструкции по его использованию. В результате вы сможете создавать зависимые выпадающие списки быстро и эффективно.

Создаем зависимые выпадающие списки при помощи VBA: пример решения
Создаем зависимые выпадающие списки при помощи VBA: пример решения

📢 Вы можете загрузить файл с исходным кодом в конце данной статьи 🔽

-3

Зависимые выпадающие списки позволяют создавать более удобные и функциональные таблицы, где значения в одном списке зависят от выбора в другом списке. Это очень удобно для работы с большими объемами данных и для создания форм для пользователей.

Рассмотрим 2 варианта возможного решения.

▶️ Исходные данные

В качестве примера рассмотрим следующий диапазон данных:

Данные, расположенные на листе Таблица1
Данные, расположенные на листе Таблица1

▶️ Наша задача:

-5

Поехали...

▶️ Вариант 1: Стандартная версия

Этот код - обработчик событий, который срабатывает при изменении данных на листе.

Код выполняет действия на основе того, в каком диапазоне произошли изменения, и обновляет список проверки данных в столбце B или C листа списка в соответствии с выбранными категориями или элементами:
Код использует событие Worksheet_Change, чтобы отслеживать изменения в столбце A листа “Список”. Когда пользователь вводит данные в столбец A листа “Список”, код создает выпадающий список уникальных категорий из столбца A листа “Таблица1” в столбце B листа “Список”. Затем, когда пользователь выбирает категорию из выпадающего списка в столбце B листа “Список”, код создает зависимый список
Код использует событие Worksheet_Change, чтобы отслеживать изменения в столбце A листа “Список”. Когда пользователь вводит данные в столбец A листа “Список”, код создает выпадающий список уникальных категорий из столбца A листа “Таблица1” в столбце B листа “Список”. Затем, когда пользователь выбирает категорию из выпадающего списка в столбце B листа “Список”, код создает зависимый список

🔔 Этот код должен быть помещен в модуль листа "Список".

🔘 Описание кода:

-7

▶️ Вариант 2: Добавим функциональность

Изменим рассмотренный выше код чтобы очистить соответствующую ячейку в столбце C листа "Список", когда значение в столбце B изменяется:

В этой версии кода добавлена строка wsList.Range("C" & Target.Row).ClearContents, которая очищает значение в столбце C листа “Список”, когда значение в столбце B листа “Список” изменяется.
В этой версии кода добавлена строка wsList.Range("C" & Target.Row).ClearContents, которая очищает значение в столбце C листа “Список”, когда значение в столбце B листа “Список” изменяется.

🔔 Также мы можем добавить условие позволяющее очистить значения в соответствующих ячейках столбцов B и C листа "Список", когда значение в столбце A листа "Список" удаляется:

В этой версии кода добавлены строки wsList.Range("B" & Target.Row).ClearContents и wsList.Range("C" & Target.Row).ClearContents, которые очищают значения в столбцах B и C листа “Список”, когда значение в столбце A листа “Список” удаляется.
В этой версии кода добавлены строки wsList.Range("B" & Target.Row).ClearContents и wsList.Range("C" & Target.Row).ClearContents, которые очищают значения в столбцах B и C листа “Список”, когда значение в столбце A листа “Список” удаляется.

⚠️ Не забудьте добавить функцию GetUniqueValues

GetUniqueValues - это пользовательская функция VBA, которая используется в коде события Worksheet_Change, чтобы получить массив уникальных значений из указанного диапазона ячеек.

▶️ Описание функции GetUniqueValues

Данная функция используется для получения уникальных значений из указанного диапазона ячеек в Excel. 
В функции присутствуют два необязательных параметра: диапазон критериев и строка критерия. Если параметры критерия не указаны, функция вернет все уникальные значения из указанного диапазона ячеек. Если же критерий указан, функция вернет уникальные значения только для ячеек, удовлетворяющих указанному критерию. Функция использует объект Scripting.Dictionary для создания уникального списка значений. В первом цикле for each происходит итерация по всем ячейкам в диапазоне данных, и если значение ячейки не было ранее добавлено в словарь, оно добавляется в него. Второй цикл for проходит по строкам диапазона данных и проверяет, удовлетворяет ли значение ячейки в столбце критериев указанному критерию. Если да, и значение ячейки данных не было добавлено в словарь, оно добавляется.
В результате выполнения функции, она возвращает массив уникальных значений из указанного диапазона ячеек в Excel.
Данная функция используется для получения уникальных значений из указанного диапазона ячеек в Excel. В функции присутствуют два необязательных параметра: диапазон критериев и строка критерия. Если параметры критерия не указаны, функция вернет все уникальные значения из указанного диапазона ячеек. Если же критерий указан, функция вернет уникальные значения только для ячеек, удовлетворяющих указанному критерию. Функция использует объект Scripting.Dictionary для создания уникального списка значений. В первом цикле for each происходит итерация по всем ячейкам в диапазоне данных, и если значение ячейки не было ранее добавлено в словарь, оно добавляется в него. Второй цикл for проходит по строкам диапазона данных и проверяет, удовлетворяет ли значение ячейки в столбце критериев указанному критерию. Если да, и значение ячейки данных не было добавлено в словарь, оно добавляется. В результате выполнения функции, она возвращает массив уникальных значений из указанного диапазона ячеек в Excel.

🔘 Как работает функция:

  • Объявление функции с именем GetUniqueValues и тремя параметрами: rngData, rngCriteria и strCriteria. Возвращаемое значение функции - Variant.
  • Объявление переменных dict (типа Object), cell (типа Range) и i (типа Long).
  • Создание экземпляра объекта Scripting.Dictionary и присвоение его переменной dict.
  • Если параметр rngCriteria не указан, то запускается цикл for each для итерации по всем ячейкам в диапазоне rngData, удовлетворяющим условию xlCellTypeConstants.
  • Если значение ячейки не было ранее добавлено в словарь, то оно добавляется в него с ключом равным значению ячейки.
  • Если параметр rngCriteria указан, то запускается цикл for для итерации по строкам в диапазоне данных rngData.
  • Проверка, удовлетворяет ли значение ячейки в столбце критериев, расположенной в строке i, указанному критерию strCriteria.
  • Если значение ячейки данных не было ранее добавлено в словарь и удовлетворяет критерию, то оно добавляется в словарь с ключом равным значению ячейки данных.
  • Возвращение массива уникальных значений словаря.
  • Конец функции.

Альтернативный прием позволяющий избежать замедления работы кода:

Пример оптимизированной версии функции GetUniqueValues
Пример оптимизированной версии функции GetUniqueValues

🔔 Эта версия функции использует массивы для ускорения обработки данных. Вы можете заменить рассмотренную выше версию функции GetUniqueValues на эту и проверить, улучшится ли производительность.

▶️ Пример работы

Как только Пользователем вносятся данные в столбец А листа Список в столбце В создается выпадающий список из уникальных значений из столбца А листа Таблица1, а после этого в столбе С создается зависимый список от значения категории выбранного в столбце В. Значения зависимого выпадающего списка которые нужно добавлять в столбец С на листе Список берутся из значений столбца В на листе Таблица1
Как только Пользователем вносятся данные в столбец А листа Список в столбце В создается выпадающий список из уникальных значений из столбца А листа Таблица1, а после этого в столбе С создается зависимый список от значения категории выбранного в столбце В. Значения зависимого выпадающего списка которые нужно добавлять в столбец С на листе Список берутся из значений столбца В на листе Таблица1
Создаем зависимые выпадающие списки при помощи VBA.mp4

Наши рекомендации:

-13

➡️ СКАЧАТЬ ПРИМЕР ФАЙЛА

Наша команда очень заинтересована в создании качественного и полезного контента. Поэтому, если Вам понравился этот урок, не забудьте поблагодарить автора лайком 👍. Если у Вас есть вопросы или своё решение, не стесняйтесь оставить комментарий 💬. Нужно решение для другой проблемы? Пожалуйста, напишите свой вопрос в комментариях 💬, и мы обязательно рассмотрим его в ближайшей теме обзора. Мы ценим Вашу обратную связь 💝, так как это помогает нам оценить, насколько данный материал был полезен для Вас.
Наша команда очень заинтересована в создании качественного и полезного контента. Поэтому, если Вам понравился этот урок, не забудьте поблагодарить автора лайком 👍. Если у Вас есть вопросы или своё решение, не стесняйтесь оставить комментарий 💬. Нужно решение для другой проблемы? Пожалуйста, напишите свой вопрос в комментариях 💬, и мы обязательно рассмотрим его в ближайшей теме обзора. Мы ценим Вашу обратную связь 💝, так как это помогает нам оценить, насколько данный материал был полезен для Вас.