Выпадающий список в ячейке листа

Видео

 У кого мало времени и нужно быстро ухватить суть - смотрим обучающее видео:

Кому интересны подробности и нюансы всех описанных способов - дальше по тексту.

Способ 1. Примитивный

Один щелчок правой кнопкой мыши по пустой ячейке под столбцом с данными, команда контекстного меню Выбрать из раскрывающегося списка (Choose from drop-down list) или нажать сочетание клавиш ALT+стрелка вниз. Способ не работает, если ячейку и столбец с данными отделяет хотя бы одна пустая строка или вам нужен товар, который еще ни разу не вводился выше:

dropdown1.gif

Способ 2. Стандартный

  1. Выделите ячейки с данными, которые должны попасть в выпадающий список (например, наименованиями товаров).
  2. Если у вас Excel 2003 или старше - выберите в меню Вставка - Имя - Присвоить (Insert - Name - Define), если Excel 2007 или новее - откройте вкладку Формулы (Formulas) и воспользуйтесь кнопкой Диспетчер имен (Name Manager), затем Создать. Введите имя (можно любое, но обязательно без пробелов и начать с буквы!) для выделенного диапазона (например Товары). Нажмите ОК.
  3. Выделите ячейки (можно сразу несколько), в которых хотите получить выпадающий список и выберите в меню (на вкладке) Данные - Проверка (Data - Validation). Из выпадающего списка Тип данных (Allow) выберите вариант Список (List) и введите в строчку Источник (Source) знак равенства и имя диапазона (т.е. =Товары).

dropdown2.gif

Нажмите ОК.

Все! Наслаждайтесь!

dropdown3.gif

Важный нюанс. В качестве источника данных для списка может выступать и динамический именованный диапазон, например прайс-лист. Тогда при дописывании новых товаров к прайсу, они будут автоматически добавляться к выпадающему списку. Еще одним часто используемым трюком для таких списков является создание связанных выпадающих списков (когда содержимое одного списка меняется в зависимости от выбора в другом).

Способ 3. Элемент управления

Этот способ представляет собой вставку на лист нового объекта - элемента управления "поле со списком" с последующей привязкой его к диапазонам на листе. Для этого:

  1. В Excel 2007/2010 откройте вкладку Разработчик (Developer). В более ранних версиях - панель инструментов Формы (Forms) через меню Вид - Панели инструментов - Формы (View - Toolbars - Forms). Если этой вкладки не видно, то нажмите кнопку Офис - Параметры Excel - флажок Отображать вкладку Разработчик на ленте (Office Button - Excel Options - Show Developer Tab in the Ribbon)
  2. Найдите значок выпадающего списка среди элементов управления форм (не ActiveX!). Ориентируйтесь по всплывающим подсказкам - Поле со списком:
    dropdown4.gif
    Щелкните по значку и нарисуйте небольшой горизонтальный прямоугольник - будущий список.
  3. Щелкните по нарисованному списку правой кнопкой мыши и выберите команду Формат объекта (Format control). В появившемся диалоговом окне задайте
    • Формировать список по диапазону - выделите ячейки с наименованиями товаров, которые должны попасть в список
    • Связь с ячейкой - укажите ячейку куда нужно выводить порядковый номер выбранного пользователем элемента.
    • Количество строк списка - сколько строк показывать в выпадающем списке. По умолчанию - 8, но можно больше, чего не позволяет предыдущий способ.

После нажатия на ОК списком можно пользоваться.

Чтобы вместо порядкового номера элемента выводилось его название можно дополнительно использовать функцию ИНДЕКС (INDEX), которая умеет выводить содержимое нужной по счету ячейки из диапазона:

dropdown6.gif

Способ 4. Элемент ActiveX

Этот способ частично напоминает предыдущий. Основное отличие в том, что на лист добавляется не элемент управления, а элемент ActiveX "Поле со списком" из раскрывающегося набора под кнопкой Вставить (Insert) с вкладки Разработчик (Developer):

dropdown7.gif

Механизм добавления тот же - выбираем объект из списка и рисуем его на листе. А вот дальше начинаются серьезные отличия от предыдущего способа.

Во-первых, созданный выпадающий ActiveX список может находится в двух принципиально разных состояниях - режиме отладки, когда можно настраивать его параметры и свойства, двигать его по листу и менять размеры и - режиме ввода, когда единственное, что можно - выбирать из него данные. Переключение между этими режимами происходит с помощью кнопки Режим Конструктора (Design Mode) на вкладке Разработчик (Developer):

dropdown8.gif

Если эта кнопка нажата, то мы можем настраивать параметры выпадающего списка, нажав соседнюю кнопку Свойства (Properties), которая откроет окно со списком всех возможных настроек для выделенного объекта:

dropdown9.gif

Самые нужные и полезные свойства, которые можно и нужно настроить:

  • ListFillRange - диапазон ячеек, откуда берутся данные для списка. Выделить мышью диапазон он не даст, надо просто вписать его руками с клавиатуры (например, Лист2!A1:A5)
  • LinkedCell - связанная ячейка, куда будет выводиться выбранный из списка элемент
  • ListRows - количество отображаемых строк
  • Font - шрифт, размер, начертание (курсив, подчеркивание и т.д. кроме цвета)
  • ForeColor и BackColor - цвет текста и фона, соответственно

Большим и жирным плюсом этого способа является возможность быстрого перехода к нужному элементу в списке при вводе первых букв с клавиатуры(!), чего нет у всех остальных способов. Приятным моментом, также, является возможность настройки визуального представления (цветов, шрифтов и т.д.)

При использовании этого способа, также возможно указывать в качестве ListFillRange не только одномерные диапазоны. Можно, например задать диапазон из двух столбцов и нескольких строк, указав дополнительно, что выводить нужно два столбца (свойство ColumnCount=2). Тогда можно получить весьма привлекательные результаты, окупающие все потраченные на дополнительные настройки усилия:

dropdown10.gif

 

Итоговая сравнительная таблица всех способов

  Способ 1. Примитивный Способ 2. Стандартный Способ 3. Элемент управления Способ 4. Элемент ActiveX
Сложность низкая средняя высокая высокая
Возможность настройки шрифта, цвета и т.д. нет нет нет да
Количество отображаемых строк всегда 8 всегда 8 любое любое
Быстрый поиск элемента по первым буквам нет нет нет да
Необходимость использования дополнительной функции ИНДЕКС нет нет да нет
Возможность создания связанных выпадающих списков нет да нет нет

Ссылки по теме:


Страницы: 1  2  3  4  5  
06.05.2014 11:15:35
Можно ли изменить ширину выпадабщего списка  тк по методу Поверка данных - Список-Имя списка ширина выпадающего списка идет по ширине ячейки а не по самому длинному тексту из списка
07.05.2014 12:07:38
Насколько я знаю - нет.
15.05.2014 06:05:03
Третий и четвертый способы несовсем удобны тем, что приходится вручную вставлять элементы управления на лист. При этом элемент управления находится в одном и том же месте и ссылается на одну и туже ячейку.

С помощью макросов можно сделать, чтобы выпадающий список элемента управления (способ 3)  станет появляться в любой ячейке указанного диапазона.
Для этого в модуле листа, на котором должен находится выпадающий список, нужно разместить такой код...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       '  "B:B" - диапазон в котором появляется выпадающий список
  If Not Intersect(Target, Range("B:B") Is Nothing Then
    Call AddDropDown(Target)
  End If
End Sub


А в любом стандартном модуле разместить...

Public Sub AddDropDown(Target As Range)
Dim Control As DropDown
Dim I As Integer

Set Control = ActiveSheet.DropDowns.Add(Target.Left, Target.Top, Target.Width, Target.Height) ' вписываем элемент управления в границы ячейки
Control.OnAction = "SelectDropDown"
Control.ListFillRange = Range("H5:H11").Address '  формировать список по диапазону
Control.DropDownLines = 10 ' количество строк списка
End Sub

Private Sub SelectDropDown()
On Error Resume Next
   With ActiveSheet.DropDowns(Application.Caller)
     .TopLeftCell.Value = .List(.ListIndex) ' записываем в ячейку, которая находится под элементом управления выбранный элемент выпадающего списка
     .Delete ' удаляем элемент управления
   End With
End Sub

Идея не моя. Взял из одной книги.
23.05.2014 12:05:21
Здравствуйте, в данной теме не смог найти ответа на интересующий меня вопрос.
А состоит он в следующем:
Можно ли из выпадающего списка activeх вытащить текстовую информацию, так как она мне потом будет нужна в последующем.
Вытащить я имею ввиду, чтобы в другом файле я мог сослаться на эту ячейку и он извлек мне из нее текст.
Может быть есть возможность просто на какой-то другой промежуточный лист в этом же документе его перетащить...
Так как есть большая база отчетов и ключевая информация из них будет копироваться в другой файл, где все эти отчеты должны кратко отображаться.
Буду искренне благодарен, если кто-то сможет мне подсказать.
Да и в любом случае большое спасибо авторам, благодаря вашему сайту я могу найти ответы на большинство моих вопросов, но, к сожалению, на этот пока не нашел.  
23.05.2014 12:13:22
Да, и еще. Данные, откуда берется информация для списка activex находятся на другом листе, который заблокирован и скрыт.
Хотел сделать что-то похоже на способ с фильтром, но, к сожалению, не выйдет, как я понимаю...
Или есть еще какой-то другой вариант выпадающего списка с поиском по первым буквам?
так как в списке порядка 2000 наименований
05.06.2014 15:08:12
Добрый день. Возможно ли применяя 4-ый способ искать среди данных не столбца, а строки. Что-то в строке не получается искать (всегда выдает только данные 1-ой ячейки).
14.06.2014 12:49:44
А вы превратите вашу строку в столбец с помощью функции ТРАНСП и ищите по столбцу :)
11.06.2014 21:47:25
Как сделать чтобы в выпадающем списке не повторялись одинаковые значения? Спасибо.
14.06.2014 12:51:05
Тимур, нужно сделать так, чтобы они не повторялись в исходном диапазоне. Посмотрите статью про извлечение уникальных элементов из диапазона - должно помочь.
15.06.2014 20:14:31
Спасибо, у меня так и было. Просто 60 промежуточных строк получается.
А вообще воспользовался вашим "Суперфильтром"
http://www.planetaexcel.ru/techniques/3/137/
отлично работает!
11.08.2014 15:34:45
Спасибо за статью, просто и доступно!
Возможно, у меня "чайниковый вопрос" - а каким должен быть список, чтобы содержимое ячейки, выбранное из списка, находилось при поиске?
Допустим, я выбираю из списка значение "А", затем через Ctrl-F делаю поиск "А" - ничего не найдено...
Заранее спасибо!
20.08.2014 11:48:53
Спасибо! очень помогло в работе :{}
05.09.2014 11:21:45
Добрый день, спасибо огромное за статью!!! Был вопрос А как сделать что бы следующее выбранное значение не заменяло, а добавлялось в следующую ячейку? Или это не возможно? Вы ответили что можно сделать через макрос, можно ли увидеть данный макрос или он мега сложный. Спасибо
12.09.2014 15:35:46
задам глупый вопрос, но лучше спросить тупость чем сделать тупость:D

для чего вообще нужен выпадающий список, чем он полезен?
23.11.2014 09:29:39
Удобно вводить повторяющиеся значения:
  • Не надо копировать
  • Не надо руками вводить с клавиатуры
  • Не будут возникать ошибки
19.09.2014 11:39:44
Добрый день, подскажите пожалуйста, столкнулся со следующей проблемой.
При создании "Проверки вводимых значений" хочу сослаться на динамический диапазон с другого листа, какая правильная форма записи и возможно ли это в принципе ?
Перепробовал разные варианты, работает корректно только если задаю обычный, не динамический, диапазон вида ($столбе$строка:$столбе$строка)
а хотелось бы видеть [@[имя столбца]], как это происходит в "Умных таблицах"
23.11.2014 09:28:08
=ДВССЫЛ("Таблица1[Оклад]")
09.11.2014 22:39:57
Здравствуйте. Столкнулся с некоторыми трудностями при создании списков. У меня эксель2003, создал поле со списком с помощью элемента управления. Если в качестве диапазона для списка задаю строку, а не столбец, то ничего не выпадает. И еще интересует возможность создания списка с фильтром, который после ввода первых символов, отображает только те значения,  которые начинаются на эти символы.
23.11.2014 09:26:38
Алексей, поиск по первым введенным буквам возможен только в списке, сделанном на основе элемента ActiveX, как и написано в статье.
А строку можно преобразовать в столбец с помощью транспонирования.
24.11.2014 13:55:34
Спасибо. С транспонированием понятно. Сделал выпадающий список на основе элемента ActiveX. Но поиск работает не совсем так, как хотелось бы. Если я ввожу символ, например "Т", находится первое значение, начинающееся на "Т". А мне нужно, что бы в выпадающем списке в дальнейшем отображались только значения, которые начинаются на "Т". после ввода второго символа, например "А", только начинающиеся на "ТА" и т.д.  
 
Добрый день. Суть вопроса. Есть список экспертов, которые должны выставить оценки перечню критериев. Критерии одни и те же для всех. Как сделать возможность фильтровать списки, чтобы посмотреть оценки, которые выставил именно этот эксперт ВСЕМУ перечню критериев?
23.11.2014 09:24:09
Алексей, а в чем сложность? Сделайте таблицу, где критерии будут идти по столбцам, а эксперты по строкам и фильтруйте обычным фильтром (Данные - Фильтр) по имени эксперта.
16.12.2014 23:16:48
Приветствую!
У меня вопрос такого плана. Список по второму способу, если количество элементов списка больше 8 то соответственно в поле списка появляется полоса прокрутки. И вот неудобство - список всегда открывается своей нижней частью (полоса прокрутки внизу) и чтобы выбрать наиболее популярный верхний элемент приходится постоянно прокручивать список. Можно ли это исправить? Или просто поменять порядок списка с ног на голову? Спасибо!
19.01.2015 21:10:36
А можно настроить выпадающий список так, что бы в ячейку с ним можно было внести данные не из этого списка?
02.02.2015 13:56:26
Добрый день! Помогите пожалуйста!  Перерыл интернет, но сам не могу сделать.
Существует два листа "Материал" и "Расход материала".
На листе Материал содержится весь материал на котором идет печать.
А на листе Расход материала нужно чтобы можно было выбирать из раскрывающегося списка по наименованию, но заполнялись и остальные 2-ве ячейки данными с таблицы Материалы
Раскрывающийся список получается сделать, но вставляется только одно значение. Побывал http://www.planetaexcel.ru/techniques/1/40/ 4-й способ,
Элемент ActiveX, но с ним неудобно. Можете помочь мне с этим?
И как можно сделать так, чтобы при открытии можно выбрать из списка пользователя который будет автоматом подставлять в поле с Фамилией и Именем. Чтото типа такого http://www.excel-vba.ru/chto-umeet-excel/kazhdomu-polzovatelyu-svoj-listdiapazon/
Вот сам файл "Списание" чтобы было понятно, что хочу сделать.
09.02.2015 11:19:57
можно использовать формулу =ЕСЛИОШИБКА(ВПР(A1;Лист2!$A$1:$D$50;2;ЛОЖЬ);" ";), файла кстати нет по ссылки. вышли на ravim86@mail.ru. Недавно решал подобную задачу
09.02.2015 11:27:49
Вот новая ссылка Ссылка. И вышлю на почту. :D
09.02.2015 12:43:44
Отпишись потом, все ли правильно я сделал
09.02.2015 12:54:24
Да все работает и не сложно оказывается!!! Спасибо большое!!!
Не зря говорят все гениальное просто!!!:D
11.03.2015 20:54:44
Ссылка на скачивание примера не работает!!!!
Спасибо автору, хорошо всё написано, очень доходчиво, пару идей уже воплотил в заданной мне задаче. Вопрос по теме - мне нужно реализовать при выборе из выпадающего списка одного из значений (допустим - приход, расход), что бы нужная мне ячейка автоматически становилась отрицательной или соответственно положительной, но есть условие - эти ячейки должны в итоге выдавать как общую сумму, так и отдельно суммировать положительные значения и отрицательные. Последнее реализовал (разбирался здесь же), но хотелось бы немного упростить и с экономить время, так как больно уж большие объёмы... Возможно такое? Заранее благодарен.
И други, всех с Великим праздником Победы!
22.06.2015 13:20:25
Доступно и наглядно! Спасибо за сайт!

Есть вопрос по 4-му методу. Можно ли сделать так, чтобы параметр
ListFillRange был переменной величиной, а не постоянной. Т.е. при выборе какого-то конкретного имени из другого выпадающего списка вставлялся именно этот диапазон (имя)? Очень нужно... помогите, пожалуйста.
06.07.2015 09:25:42
Уважаемые форумчане, нужна ваша хелп!
Реализовал у себя в таблице способ №4 из этой статьи. Раньше пользовался выпадающим списком с мультивыбором (Вариант №1 из этой статьи: http://www.planetaexcel.ru/techniques/1/181/).

А теперь собственно вопрос:
Есть ли возможность  в данном случае его применить?
Если да, то подскажите как пожалуйста как.

За ранее спасибо!
21.08.2015 22:50:29
А можно как то сослаться на список сделанный по 4 способу?. Т.е я выбираю там что, это что то переносится автоматом в другую ячейку, а потом куча других ячеек с ней работают?
31.08.2015 15:38:18
Здравствуйте
Сделал по третьему примеру, использовал =СМЕЩ([ИСТ.xlsm]номенклатор!$A$1;ПОИСКПОЗ('ЦЭКС (2)'!$F4;[ИСТ.xlsm]номенклатор!$A:$A;0);1;СЧЁТЕСЛИ([ИСТ.xlsm]номенклатор!$A:$A;'ЦЭКС (2)'!$F4);1)

работает за одним нюансом
добавляет в выпадающий список со смещением в 1 позицию.
т.е. если выбираю в ячейке F4 группу ГСМ, то он начинает со второй строки и захватывает одну строку со следующей группы (з/ч к авто)
14.10.2015 11:02:47
Здравствуйте, Николай! Спасибо за сайт!!! Спасибо за уроки и советы!!!

У меня тоже есть вопрос (не осилила прочесть все комменты, возможно повторюсь). У меня есть таблица из 2х столбцов "Услуги" и "Цены". Как сделать так, чтобы в одной ячейке я выбирала услугу из выпадающего списка, а в соседней автоматически "вставала" соответствующая цена?
Спасибо!
14.10.2015 11:25:15
Венера, вам нужна функция ВПР
14.10.2015 11:30:58
спасибо! буду дальше изучать :)
18.11.2015 10:21:54
Столкнулся с проблемой. Создаю выпадающий список, допустим с именами Саша, Маша, Петя.
Вставляю в несколько ячеек имена допустим Маша.
Затем открываю сам список и редактирую слово Маша на Маша_Попова.
По логике событий во всех ячейках где было выбрано слово Маша должно измениться на Маша_Попова. А этого не происходит ( и приходиться во всех ячейках повторно выбирать вместо Маша, новое слово Маша_Попова. Так вот как сделать что бы в ячейке автоматом менялось Маша на Маша_Попова.
Надеюсь Вы поняли мою мысль.
25.11.2015 15:26:38
Всем привет!
Столкнулся с такой проблемой, при открытии книги в разных версиях EXCEL, а в частности после 2013 в 2010 или 2007 книга с ранее заполненным текстом остается, а вот реализованная функция выпадающего списка исчезает. Т.е. использую описанный выше Способ 2.
В чем может быть проблема?
И как её решить? Не переделывать же заново книгу, каждый раз её открывая в разных версиях EXCEL.
25.12.2015 11:46:04
Добрый день, коллеги прочитал много но не понял, как же настроить свойство ColumnCount=2, для того что бы 4 способом, описанным в данной статье. можно было находить из всего списка не только 1 колонку а несколько столбцов?
Страницы: 1  2  3  4  5  
Наверх