Связанные (зависимые) выпадающие списки
Способ 1. Функция ДВССЫЛ (INDIRECT)
Этот фокус основан на применении функции ДВССЫЛ (INDIRECT), которая умеет делать одну простую вещь - преобразовывать содержимое любой указанной ячейки в адрес диапазона, который понимает Excel. То есть, если в ячейке лежит текст "А1", то функция выдаст в результате ссылку на ячейку А1. Если в ячейке лежит слово "Маша", то функция выдаст ссылку на именованный диапазон с именем Маша и т.д. Такой, своего рода, "перевод стрелок" ;)
Возьмем, например, вот такой список моделей автомобилей Toyota, Ford и Nissan:
Выделим весь список моделей Тойоты (с ячейки А2 и вниз до конца списка) и дадим этому диапазону имя Toyota на вкладке Формулы (Formulas) с помощью Диспетчера имен (Name Manager). Затем повторим то же самое со списками моделей Ford и Nissan, задав соответственно имена диапазонам Ford и Nissan.
При задании имён помните о том, что имена диапазонов в Excel не должны содержать пробелов, знаков препинания и начинаться обязательно с буквы. Поэтому если бы в одной из марок автомобилей присутствовал бы пробел (например Ssang Yong), то его пришлось бы заменить в ячейке и в имени диапазона на нижнее подчеркивание (т.е. Ssang_Yong).
Теперь создадим первый выпадающий список для выбора марки автомобиля. Выделите пустую ячейку (на картинке выше - зелёную) и нажмите кнопку Проверка данных (Data Validation) на вкладке Данные (Data). Затем из выпадающего списка Тип данных (Allow) выберите вариант Список (List) и в поле Источник (Source) выделите ячейки с названиями марок (желтые ячейки в нашем примере). После нажатия на ОК первый выпадающий список готов.
Теперь создадим второй выпадающий список, в котором будут отображаться модели выбранной в первом списке марки. Также как в предыдущем случае, выделите пустую ячейку, где должен быть список моделей (на картинке она синяя) и откройте окно Проверки данных, но в поле Источник нужно будет ввести вот такую формулу:
=ДВССЫЛ(F2)
где F2 - адрес ячейки с первым выпадающим списком (замените на свой).
Все. После нажатия на ОК содержимое второго списка будет выбираться по имени диапазона, выбранного в первом списке.
Минусы такого способа:
- Надо руками создавать много именованных диапазонов (если у нас много марок автомобилей).
- В качестве вторичных (зависимых) диапазонов не могут выступать динамические диапазоны задаваемые формулами типа СМЕЩ (OFFSET). Для первичного (независимого) списка их использовать можно, а вот вторичный список должен быть определен жестко, без формул. Однако, это ограничение можно обойти, создав справочник соответствий марка-модель (см. Способы 3 и 4).
- Имена вторичных диапазонов должны совпадать с элементами первичного выпадающего списка. Т.е. если в нем есть текст с пробелами, то придется их заменять на подчеркивания с помощью функции ПОДСТАВИТЬ (SUBSTITUTE), т.е. формула будет выглядеть как:
=ДВССЫЛ(ПОДСТАВИТЬ(F2;" ";"_"))
Способ 2. Умные таблицы
Этот подход очень похож на предыдущий, но использует вместо именованных диапазонов - "умные" динамические таблицы, которые будут выступать источником данных для вторичного списка:
Таким образом, мы:
- Сначала преобразуем наши справочники в "умные" таблицы, используя сочетание клавиш Ctrl+T или команду Главная - Форматировать как таблицу (Home - Format as Table) и
- Даём им имена (Фрукты, Овощи, Зелень) на вкладке Конструктор (Design) в поле Имя таблицы (Table Name).
- Создаём первый и второй (связанный) выпадающие списки точно так же, как в предыдущем способе с функцией ДВССЫЛ (INDIRECT).
Способ 3. Отсортированный справочник
Этот способ требует наличия отсортированного списка соответствий марка-модель вот такого вида:
Для создания первичного выпадающего списка можно марок можно воспользоваться обычным способом, описанным выше, т.е. выбрать на вкладке Данные (Data) команду Проверка данных (Data validation) и указать в качестве источника жёлтые ячейки с марками
А вот для зависимого списка моделей придется создать именованный диапазон с функцией СМЕЩ (OFFSET), который будет динамически ссылаться только на ячейки моделей определенной марки. Для этого:
- Нажмите сочетание клавиш Ctrl+F3 или воспользуйтесь кнопкой Диспетчер имен (Name manager) на вкладке Формулы (Formulas).
- Создайте новый именованный диапазон с любым именем (например Модели) и в поле Ссылка (Reference) в нижней части окна введите руками следующую формулу:
=СМЕЩ($A$1;ПОИСКПОЗ($G$7;$A:$A;0)-1;1;СЧЁТЕСЛИ($A:$A;$G$7);1)
=OFFSET($A$1;MATCH($G$7;$A:$A;0)-1;1;COUNTIF($A:$A;$G$7);1)
Ссылки должны быть абсолютными (со знаками $). После нажатия Enter к формуле будут автоматически добавлены имена листов - не пугайтесь.
Работает это следующим образом. Функция СМЕЩ (OFFSET) умеет выдавать ссылку на диапазон нужного размера, сдвинутый относительно исходной ячейки на заданное количество строк и столбцов. В более понятном варианте синтаксис этой функции таков:
=СМЕЩ(начальная_ячейка; сдвиг_вниз; сдвиг_вправо; высота_диапазона_в_строках; ширина_диапазона_в_столбцах)
Таким образом:
- начальная ячейка - берем первую ячейку нашего списка, т.е. А1
- сдвиг_вниз - нам считает функция ПОИСКПОЗ (MATCH), которая, попросту говоря, выдает порядковый номер ячейки с выбранной маркой (G7) в заданном диапазоне (столбце А)
- сдвиг_вправо = 1, т.к. мы хотим сослаться на модели в соседнем столбце (В)
- высота_диапазона_в_строках - вычисляем с помощью функции СЧЕТЕСЛИ (COUNTIF), которая умеет подсчитать количество встретившихся в списке (столбце А) нужных нам значений - марок авто (G7)
- ширина_диапазона_в_столбцах = 1, т.к. нам нужен один столбец с моделями
В итоге должно получиться что-то вроде этого:
Осталось добавить выпадающий список на основе созданной формулы к ячейке G8. Для этого:
- выделяем ячейку G8
- выбираем на вкладке Данные (Data) команду Проверка данных (Data validation)
- из выпадающего списка выбираем вариант проверки Список (List) и вводим в качестве Источника (Source) знак равно и имя нашего диапазона, т.е. =Модель
И наш связанный список моделей готов.
Способ 4. Неотсортированный справочник
Предыдущий способ неплох, но предполагает наличие обязательно отсортированного справочника вида "марка-модель", где названия марок повторяются многократно. Иногда же требуется в качестве справочника использовать более банальную конструкцию:
Первый уровень выпадающего списка (диапазон А2:А14 на рисунке выше) здесь делается классическим образом через команду Данные - Проверка данных - Список (Data - Validation - List) и в качестве источника указать зелёные ячейки с названиями категорий.
А для связанных выпадающих списков во втором столбце (B2:B14) в поле Источник (Source) мы используем хитрую формулу:
=СМЕЩ($E$2;1;ПОИСКПОЗ(A2;$E$2:$G$2;0)-1;СЧЁТЗ(СМЕЩ($E$2;1;ПОИСКПОЗ(A2;$E$2:$G$2;0)-1;10;1));1)
Она ищет нужную категорию в зелёной шапке таблицы, спускается на одну ячейку вниз и ссылается затем на диапазон, по высоте равный количеству товаров в выбранной категории.
Ссылки по теме
- 4 способа создать выпадающий список в ячейках листа
- Автоматическое создание выпадающих списков при помощи инструментов надстройки PLEX
- Выбор фото из выпадающего списка
- Выпадающий список с автоматическим удалением уже использованных элементов
- Динамическая выборка данных для выпадающего списка функциями ИНДЕКС и ПОИСКПОЗ
у меня вопрос по выпадающим спискам. У меня есть центры и их коды, хотелось бы сделать так, что бы при выборе центра в одной ячейке, в соседней выпадал его код. С выпадающими списками ознакомился, впринципе, получается, но там надо ручками выбирать код есть ли возможность сделать, что бы при выборе центра, код появлялся самостоятельно, без второго выпадающего столбца?
PS: Упс, не проскроллил страницу ниже, и не сразу увидел что ответ уже есть
Пытаюсь сделать Связанные (зависимые) выпадающие списки по варианту 2.
Почему-то для части списка формула СМЕЩ работает, но часть не работает с ошибкой ЗНАЧ!
Пож, подскажите, что делаю неправильно?
Хотела вложить файл с ошибкой, но как это сделать?
Спасибо!
Анжела
Заранее благодарю.
Есть ли какой способ создать выпадающий список в случае если (пример из способа 2) признаки в столбце А будут вразнобой?
Т.е. TOYOTA не с 1 по 7 строки, а вперемешку с FORD и NISSAN.
Отсортировать по возрастанию/убыванию не получается, т.к. вытаскиваю уникальные наименования из массива.
По способу № 2 - у меня 4 марки. 3 марки по 10 моделей, и 1 марка с одной моделью.
И при выпадении списка моделей, для выбора всегда появляется 1 ячейка из чужого диапазона.
А при выборе 4 марки - вообще выбор модели пустой.
Что делать? Как исправить?
Открывайте Диспетчер Имен на вкладке Формулы, выделяйте по очереди каждый именованный диапазон и щелкайте в формулу со СМЕЩ - если все правильно, то диапазон будет подсвечен на листе. Если не подсвечивает - значит в формуле косяк.
Николай. Спасибо за статью и видеоурок.
У меня вопрос: " Как сделать, чтобы в выпадающем списке можно было выбирать слово по первым буквам ?"
Когда в списке 30 наименований утомительно искать.
Заранее благодарен за ответ.
Сделал выпадающий список по третьему способу с помощью данных из другой книги по формуле
=СМЕЩ([ИСТ.xlsm]номенклатор!$A$1;ПОИСКПОЗ('ЦЭКС (2)'!$F4;[ИСТ.xlsm]номенклатор!$A:$A;0);1;СЧЁТЕСЛИ([ИСТ.xlsm]номенклатор!$A:$A;'ЦЭКС (2)'!$F4);1)
Проблема в том, что при выборе первого выпадающего списка "Группа ТМЦ" во второй список "Товары" добавляются данные со смещением в одну позицию, т.е. если в группе выбрано ГСМ, то во второй список попадают все значения с группы ГСМ со второй позиции и добавляется одна, первая, позиция со второй группы (з/ч к авто) и т.д.
т.е. для примера (строк очень много. допустим машины с номерами. выпадающий список автоматически привод или ручной). большинство машин из 300 (допустим) у нас автоматы. и хотелось бы выбрав значение в первом списке - автомат получить его для всех остальных выпадающих списков столбца (тяжело щелкать каждый раз по 300). но допустим 5-7 из них ручные - вот их что бы можно было поменять в списке ручками.
можно такое реализовать как-то? спасибо огромное
Спасибо за Ваши советы, очень познавательно и во многом помогают. Но сейчас у меня возникла проблема, которую прошу Вас мне помочь решить. Сейчас работаю на созданием опросного листа для моей скромной компании и зашел в тупик. У меня к Вам несколько вопросов:
1. вопрос как у меня, Вам уже задавали вот здесь
2. я делаю связанные (зависимые) выпадающие списки (научился их делать из Вашего видео). Можно ли сделать такое: у Вас на видео от основного выдающего списка (овощи, фрукты, зелень) зависит только одна ячейка, в которой выбирается абрикос, огурец или лук, в зависимости от того, что выбрать в первой ячейке. А мне нужно, чтобы от основной ячейки было 2 отдельные зависимые ячейки. у меня не получается это сделать, потому что я написал название диапазону для первой зависимой ячейки, а для другой зависимой ячейки тот самый диапазон excel не принимает. Вообщем мне нужна такая цепочка: если в основной ячейке выпадающего списка выбрать овощи, то в первой зависимой ячейке будет картошка, помидор, огурец, а в другой зависимой ячейке будет, например название компаний, кто производит эти овощи, если выбрать в основной ячейке фрукты, то в первой зависимой ячейке будет перечень фруктов, а в другой - перечень компаний, кто производит эти фрукты.
3. Если у меня содержание ячеек в выпадающем списке состоит не из одного слова - овощи, а из 2 или более - свежие и вкусные овощи - тогда их нужно писать ТОЛЬКО через нижнее подчеркивание - свежие_и_вкусные_овощи - или есть какой то вариант их написать через пробел? ( если их записать через пробел, тогда я не могу записать название столбца(диапазона))
Спасибо Вам за внимание и помощь!
Вопрос по примеру.
Если выбрать сначала, например, ford и конкретную модель из связанного списка, а потом переключить, например, на nissan, то значение в связанном списке мгновенно не обновляется. Можно ли, чтобы связанный список обновлялся? Дело в том, что я хочу использовать данные списков в макросе, и если не будет обновления, то макрос получит не те данные на вход. Что посоветуете?
Спасибо.
Спасибо за Ваши советы, очень помогают. Вопрос как у меня, Вам уже задавали -
Спасибо.
Огромное спасибо за сайт!
Подскажите пожалуйста,как увеличить высоту выпадающего списка,что бы было не 8 строк,а больше (например 30).
Спасибо!
Такая задача: есть два столбца с данными 1 - Компания (данные - список должностей), 2 - Подрядчик. Необходимо, чтобы при выборе из выпадающего списка Компании в соседней ячейке также из списка можно было выбрать должность (это сделано), но при выборе Подрядчика ячейка рядом оставалась пустой (текстовой), чтобы можно было заносить данные вручную (т.е. без выпадающего списка). Возможно ли такое?
С уважением.
как сделать чтобы, когда происходит выбор одной ячейки из выпадающего списка одного значения (Х) автоматически происходило заполнение того же значения (Х) в другой ячейки? Короче говоря: при выборе ячейки К18 список Х нужно чтобы в ячейки М 18 также ставилось значение Х. Спасибо.
=К18
и нажмите Enter
Одно из наименований пишется через тире и при выдаче названия списку потом не подцепляется нужное значение
Может кто, что подскажет.
Спасибо
У меня в таблице 2 зависимых списка, но один получается пустым. Почему такая проблема?
С одной стороны нашел то, что искал, но не полностью.
Помогите доработать под мою задачу:
Есть таблица №1 с фиксированным количеством столбцов (допустим 5 штук) и увеличивающаяся по количеству строк. В данной таблице каждая строка имеет оригинальную комбинацию категории и товара. Отформатировал ее как "Умную таблицу". Новые строки добавляются по средством Макроса №1. Этот же макрос сразу после добавления строки в таблицу №1 и сортирует ее сначала по колонке №1, а затем по колонке №2.
Существует еще Макрос №2, привязанный к Диалоговому окну, и таблица №2.
Задача: Надо выбирать в Диалоговом окне в поле со списком №1 категории, которые бывают в таблице №1 в колонке №1, после чего в том же самом Диалоговом окне в поле со списком №2 должен быть доступен список товаров соответствующих категории (колонка №2 из таблицы №1).
На выходе должно быть следующее: при нажатии определенной кнопки Диалогового окна, выбранные позиции (категория и товар) должны попасть в новую строчку в таблице №2, а также данные из таблицы №1 по соответствующей позиции (данные из оставшихся колонок) тоже должны быть автоматически скопированы в таблицу №2.