Найти тему

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

Оглавление

Выпадающие списки – неотъемлемая часть работы с данными в Excel.

Благодаря широкому выбору подходов пользователю доступно множество способов к созданию таких списков в зависимости от уникальных требований задачи.

Один из примеров, иллюстрирующий простой и эффективный метод создания зависимого выпадающего списка при помощи VBA рассмотрен данном обзоре.

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

📢 Файл с примером размещен в конце статьи 🔽

-3
Рассмотренный пример будет полезен в случае если требуется упорядочить параметры выбора зависимых данных.

Для целей данного рассмотрим ситуацию когда требуется настроить зависимый выпадающий список в зависимости от выбранной категории товара.

▶️ Создаем выпадающий список

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

  • Овощи
  • Фрукты
  • Ягоды

Выпадающий список для данных категорий определим по столбцу В.

-4

Для решения поставленной задачи безусловно можно воспользоваться применением проверки данных к ячейкам:

Применение проверки данных к ячейкам
Применение проверки данных к ячейкам

Но создать аналогичный выпадающий список можно и при помощи VBA:

Данный макрос создает выпадающий список в каждой ячейке столбца B, начиная с ячейки B2 до последней непустой ячейки (определенной по столбцу A)
Данный макрос создает выпадающий список в каждой ячейке столбца B, начиная с ячейки B2 до последней непустой ячейки (определенной по столбцу A)

⚙️ Краткое описание:

  • устанавливаем переменные;
  • определяем перечисления, которые будут использоваться в выпадающем списке;
  • проходим по каждой ячейке в столбце B, начиная с B2. Если ячейка столбца А пустая или не внесена ни одна запись, то список не создается.
  • перед созданием нового выпадающего списка удаляем существующие правила проверки данных;
  • добавляем новые настроек валидации с типом "список" и перечисленными значениями. Тип проверки устанавливается равным списку (xlValidateList). А параметр AlertStyle имеет значение xlValidAlertStop, которое запрещает пользователю вводить неверные данные в любую из ячеек столбца B.
Примечание автора: параметр Operator: =xlBetween, в данном случае не используется, т.к тип равен xlValidateList.

Теперь при при наличии данных с столбце А в столбце B будет создан выпадающий список содержащий элементы: "Овощи", "Фрукты" и "Ягоды".

Выпадающий список при помощи VBA
Выпадающий список при помощи VBA

▶️ Создаем зависимый выпадающий список

Предварительно для установленных категорий создадим три справочника и определим для каждого свой именованный диапазон:

-8

Чтобы создать зависимый выпадающий список применим макрос:

Данный макрос создает зависимый выпадающий список в каждой ячейке столбца С (начиная с С2)
Данный макрос создает зависимый выпадающий список в каждой ячейке столбца С (начиная с С2)

⚙️ Краткое описание:

  • перебираем каждую ячейку в столбце B активного листа и считываем ее содержимое.
  • на основе содержимого ячейки выбираем, какую формулу использовать для проверки данных. Проверка выполняется в ячейке на один столбец правее (смещение (0, 1)) текущей ячейки.
  • перед созданием выпадающего списка удаляем из ячейки все существующие проверки данных. Если ни одна из категорий не совпадает (Овощи, Фрукты или Ягоды), список в ячейку добавляться не будет.

▶️ Управление выбором

Чтобы рассмотренные выше макросы выполнялись автоматически следует в модуле листа разместить код:

В данном примере мы использовали  Worksheet_SelectionChange и Worksheet_Change для обработки событий при изменении выделенной ячейки и изменении содержимого ячейки, соответственно.
В данном примере мы использовали Worksheet_SelectionChange и Worksheet_Change для обработки событий при изменении выделенной ячейки и изменении содержимого ячейки, соответственно.

Напомним, что, Worksheet_SelectionChange срабатывает при выборе ячейки, в то время как Worksheet_Change срабатывает после изменения содержимого.

Поэтому соответствующие макросы (DropDownList и DependentDropDownList) были назначены на Worksheet_SelectionChange, а очистка содержимого ячеек при изменении значений в столбцах A и B на Worksheet_Change.

📝 Примечание автора: очистка содержимого ячеек добавлена для обеспечения согласованности и корректности данных. Например, значения столбца A предназначены для управления содержимым столбцов B и C ячейки которых будут очищены при удалении данных из соответствующей ячейки в столбце A.

▶️ Тестируем результат

Чтобы удостовериться, что выпадающие списки создаются корректно, зависимости между ними устанавливаются правильно проверим, как код реагирует на изменения в данных:

-11
-12

А в заключении отметим, что это ни единственный подход решения поставленной задачи. И конечно же нет предела совершенству 😉.

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

🙌 Оставайся с нами на связи и узнавай больше о других методах и приемах работы в Excel:

Excel на ИЗИ
It's Moskovskaya_Excel на ИЗИ - YouTube
Примеры макросов VBA Excel | Excel на ИЗИ: ✅ Приемы эффективной работы в Microsoft Excel | Дзен

СКАЧАТЬ ПРИМЕР 🔽

VBA Excel. Как создать зависимый выпадающий список.xlsm