Найти в Дзене

📌 Решение задачи: как создать зависимый выпадающий список. Макрос VS Формулы

Оглавление

Все мы знаем, что зависимый выпадающий список достаточно удобная вещь.

Способов создания выпадающего списка существует несколько.

Как лучше создать зависимый выпадающий список (какой способ выбрать) безусловно зависит от ваших знаний Excel, конечной задачи и того, как представлены исходные данные.

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

А какой способ лучше - решать вам! 😉

Решение задачи: как создать зависимый выпадающий список. Макрос VS Формулы
Решение задачи: как создать зависимый выпадающий список. Макрос VS Формулы

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

-3

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

Для целей данного примера рассмотрим пример оформления заявки на доставку товара:

-4

Источник данных (ассортимент товара) размещен на отдельном листе и имеет вид:

-5

А сами данные представлены в форме таблиц:

Так же заданы:

  • именованная ячейка "Start"
именованная ячейка
именованная ячейка
  • именованный диапазон "Ассортимент":
именованный диапазон
именованный диапазон

🎯 Задача: для автоматизации процесса оформления заявки сформировать выпадающий список в столбце В и зависимый ему выпадающий список в столбце С.

▶️ Способ 1. Зависимый выпадающий список формулой

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

Для этого, в столбце В укажем тип данных "Список", а в качестве источника - именованный диапазон "Ассортимент":

-8
Как указывалось выше способов создания выпадающих списков существует несколько.

Ранее мы рассматривали возможность создать зависимый выпадающий список при помощи функции If (ЕСЛИ):

Еще одним из способов является совместное использование встроенных функций: СМЕЩ, ПОИСКПОЗ и СЧЁТЗ.

Напомним:

  • функция СМЕЩ:
Аргументы функции СМЕЩ
Аргументы функции СМЕЩ
  • функция ПОИСКПОЗ:
Аргументы функции ПОИСКПОЗ
Аргументы функции ПОИСКПОЗ
  • функция СЧЁТЗ:
Аргументы функции СЧЁТЗ
Аргументы функции СЧЁТЗ

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

  • в качестве ссылки задаем именованную ячейку "Start" относительно которой будет выполнено смещение:
-12
  • определяем смещение по строкам равное 1:
-13
  • смещение по столбцам определим формулой: ПОИСКПОЗ(B4;Ассортимент;0)-1
-14
Определяет: на сколько нужно сместиться вправо относительно стартовой ячейки чтобы "попасть" в нужный столбец
Определяет: на сколько нужно сместиться вправо относительно стартовой ячейки чтобы "попасть" в нужный столбец
  • высоту диапазона (число элементов выпадающего списка) определим формулой: СЧЁТЗ(СМЕЩ(Start;1;ПОИСКПОЗ(B4;Ассортимент;0)-1;10;1))
-16
Число элементов выпадающего списка
Число элементов выпадающего списка
  • т.к. каждой категории должен соответствовать свой товар ширина в столбцах так же принимается равной 1:
-18

🔘 Результирующая формула:

-19

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

Формула выпадающего списка: СМЕЩ(Start;1;ПОИСКПОЗ(B4;Ассортимент;0)-1;СЧЁТЗ(СМЕЩ(Start;1;ПОИСКПОЗ(B4;Ассортимент;0)-1;10;1));1)
Формула выпадающего списка: СМЕЩ(Start;1;ПОИСКПОЗ(B4;Ассортимент;0)-1;СЧЁТЗ(СМЕЩ(Start;1;ПОИСКПОЗ(B4;Ассортимент;0)-1;10;1));1)

🔻 Тестируем результат:

Если вы все выполнили верно, то для каждой категории товара будет задан свой выпадающий список:

-21

▶️ Способ 2. Зависимый выпадающий список макросом

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

-22

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

-23
Валидация данных представляет собой выпадающий список, который строится на основе найденного диапазона данных на листе wsSource.

Таким образом, макрос позволяет создавать выпадающие списки в столбце C листа wsDestination на основе данных из листа wsSource, соответствующих значениям в столбце B листа wsDestination:

-24

Чтобы автоматизировать работу макроса и автоматически создавать не только зависимый, но и исходный выпадающий список применим событие Worksheet.SelectionChange, и добавим в модуль листа следующий макрос:

-25

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

-26

Теперь мы имеем возможность динамически создавать выпадающие списки в столбце B на основе данных из листа wsSource и автоматически обновлять их при изменении выбранной ячейки:

-27

▶️ Дополнения

И все хорошо, если бы ни одно "НО" 😉.

Сейчас, если пользователь очищает ячейку или меняет её значение 🔽

-28

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

Исправить данную ситуацию поможет макрос заданный на событие Worksheet.Change:

-29

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

-30

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

-31

А на этом сегодня все! 😉

Полагаем наше решение поможет вам в создании собственных зависимых выпадающих списков.

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

📍 Рекомендуемые статьи 🔽

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