Выпадающий список в ячейке листа
Видео
У кого мало времени и нужно быстро ухватить суть - смотрим обучающее видео:
Кому интересны подробности и нюансы всех описанных способов - дальше по тексту.
Способ 1. Примитивный
Один щелчок правой кнопкой мыши по пустой ячейке под столбцом с данными, команда контекстного меню Выбрать из раскрывающегося списка (Choose from drop-down list) или нажать сочетание клавиш ALT+стрелка вниз. Способ не работает, если ячейку и столбец с данными отделяет хотя бы одна пустая строка или вам нужен товар, который еще ни разу не вводился выше:
Способ 2. Стандартный
- Выделите ячейки с данными, которые должны попасть в выпадающий список (например, наименованиями товаров).
- Если у вас Excel 2003 или старше - выберите в меню Вставка - Имя - Присвоить (Insert - Name - Define), если Excel 2007 или новее - откройте вкладку Формулы (Formulas) и воспользуйтесь кнопкой Диспетчер имен (Name Manager), затем Создать. Введите имя (можно любое, но обязательно без пробелов и начать с буквы!) для выделенного диапазона (например Товары). Нажмите ОК.
- Выделите ячейки (можно сразу несколько), в которых хотите получить выпадающий список и выберите в меню (на вкладке) Данные - Проверка (Data - Validation). Из выпадающего списка Тип данных (Allow) выберите вариант Список (List) и введите в строчку Источник (Source) знак равенства и имя диапазона (т.е. =Товары).
Нажмите ОК.
Все! Наслаждайтесь!
Важный нюанс. В качестве источника данных для списка может выступать и динамический именованный диапазон, например прайс-лист. Тогда при дописывании новых товаров к прайсу, они будут автоматически добавляться к выпадающему списку. Еще одним часто используемым трюком для таких списков является создание связанных выпадающих списков (когда содержимое одного списка меняется в зависимости от выбора в другом).
Способ 3. Элемент управления
Этот способ представляет собой вставку на лист нового объекта - элемента управления "поле со списком" с последующей привязкой его к диапазонам на листе. Для этого:
- В Excel 2007/2010 откройте вкладку Разработчик (Developer). В более ранних версиях - панель инструментов Формы (Forms) через меню Вид - Панели инструментов - Формы (View - Toolbars - Forms). Если этой вкладки не видно, то нажмите кнопку Офис - Параметры Excel - флажок Отображать вкладку Разработчик на ленте (Office Button - Excel Options - Show Developer Tab in the Ribbon)
- Найдите значок выпадающего списка среди элементов управления форм (не ActiveX!). Ориентируйтесь по всплывающим подсказкам - Поле со списком:
Щелкните по значку и нарисуйте небольшой горизонтальный прямоугольник - будущий список. - Щелкните по нарисованному списку правой кнопкой мыши и выберите команду Формат объекта (Format control). В появившемся диалоговом окне задайте
- Формировать список по диапазону - выделите ячейки с наименованиями товаров, которые должны попасть в список
- Связь с ячейкой - укажите ячейку куда нужно выводить порядковый номер выбранного пользователем элемента.
- Количество строк списка - сколько строк показывать в выпадающем списке. По умолчанию - 8, но можно больше, чего не позволяет предыдущий способ.
После нажатия на ОК списком можно пользоваться.
Чтобы вместо порядкового номера элемента выводилось его название можно дополнительно использовать функцию ИНДЕКС (INDEX), которая умеет выводить содержимое нужной по счету ячейки из диапазона:
Способ 4. Элемент ActiveX
Этот способ частично напоминает предыдущий. Основное отличие в том, что на лист добавляется не элемент управления, а элемент ActiveX "Поле со списком" из раскрывающегося набора под кнопкой Вставить (Insert) с вкладки Разработчик (Developer):
Механизм добавления тот же - выбираем объект из списка и рисуем его на листе. А вот дальше начинаются серьезные отличия от предыдущего способа.
Во-первых, созданный выпадающий ActiveX список может находится в двух принципиально разных состояниях - режиме отладки, когда можно настраивать его параметры и свойства, двигать его по листу и менять размеры и - режиме ввода, когда единственное, что можно - выбирать из него данные. Переключение между этими режимами происходит с помощью кнопки Режим Конструктора (Design Mode) на вкладке Разработчик (Developer):
Если эта кнопка нажата, то мы можем настраивать параметры выпадающего списка, нажав соседнюю кнопку Свойства (Properties), которая откроет окно со списком всех возможных настроек для выделенного объекта:
Самые нужные и полезные свойства, которые можно и нужно настроить:
- ListFillRange - диапазон ячеек, откуда берутся данные для списка. Выделить мышью диапазон он не даст, надо просто вписать его руками с клавиатуры (например, Лист2!A1:A5)
- LinkedCell - связанная ячейка, куда будет выводиться выбранный из списка элемент
- ListRows - количество отображаемых строк
- Font - шрифт, размер, начертание (курсив, подчеркивание и т.д. кроме цвета)
- ForeColor и BackColor - цвет текста и фона, соответственно
Большим и жирным плюсом этого способа является возможность быстрого перехода к нужному элементу в списке при вводе первых букв с клавиатуры(!), чего нет у всех остальных способов. Приятным моментом, также, является возможность настройки визуального представления (цветов, шрифтов и т.д.)
При использовании этого способа, также возможно указывать в качестве ListFillRange не только одномерные диапазоны. Можно, например задать диапазон из двух столбцов и нескольких строк, указав дополнительно, что выводить нужно два столбца (свойство ColumnCount=2). Тогда можно получить весьма привлекательные результаты, окупающие все потраченные на дополнительные настройки усилия:
Итоговая сравнительная таблица всех способов
Способ 1. Примитивный | Способ 2. Стандартный | Способ 3. Элемент управления | Способ 4. Элемент ActiveX | |
Сложность | низкая | средняя | высокая | высокая |
Возможность настройки шрифта, цвета и т.д. | нет | нет | нет | да |
Количество отображаемых строк | всегда 8 | всегда 8 | любое | любое |
Быстрый поиск элемента по первым буквам | нет | нет | нет | да |
Необходимость использования дополнительной функции ИНДЕКС | нет | нет | да | нет |
Возможность создания связанных выпадающих списков | нет | да | нет | нет |
Ссылки по теме:
- Выпадающий список с данными из другого файла
- Создание зависимых выпадающих списков
- Автоматическое создание выпадающих списков надстройкой PLEX
- Выбор фото из выпадающего списка
- Автоматическое удаление уже использованных элементов из выпадающего списка
- Выпадающий список с автоматическим добавлением новых элементов
Никак не могу настроить, чтобы в ячейке с выпадающим списком слова переносились по ширине ячейки
с исходным текстом прямо беда у меня.
Прописываю:
Private Sub ComboBox1_Change()
Range(ComboBox1.LinkedCell).WrapText = True
Rows(Range(ComboBox1.LinkedCell).Row).AutoFit
End Sub
выдает ошибку.
Как настроить перенос текста?
Т.е когда отпуствует выбор в зависимом списке, значение в нем появлялось само.
п.с. сейчас если значение всего одно, то приходится выбирать между пробелом и единственным значением.
Но есть ещё такая ситуация:
Иногда есть 2 столбца. В выпадающем списке в ячейках второго столбца должен выпадать список, зависящий от значений в левой ячейке первого столбца. И количество строк большое и изменяется.
Можно что-то сделать в этом случае?
При создании и присвоении ячейки типа Раскрывающегося списка и вводом постоянных значений:
Range("L" + CStr(i)).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="List 1;List 2;List3;List4;"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Далее после отработки этого макроса, в списке появляется на выбор только ОДНА сторока "List 1;List 2;List3;List4;"
если я ее пересохраняю средствами EXEL через "проверка данных/список/ввод значений" получается список из 4 строк.
Прошу помощи.
1. т.е. по всем выделенным нескольким ячейкам, в которых нужно получить выпадающий список (а не только в одной ячейке, в которой помещён элемент ActiveX)
2. сделать "быстрый поиск элемента по первым буквам",
3. и +"возможность создания связанных выпадающих списков". Помогите, пожалуйста, это реализовать. Я думаю, что этот ещё универсальный Способ 5 будет всем интересен...
4-ый вариант может ли записывать не жестко заданную ячейку, а, например, в активную ?
P/S/ понимаю, что с помощью VBA можно реализовать, но быть может можно и без ?
На первом - столбцы "товары", "цена", выпадающий список "категория" (и другие)
на втором - столбец "список категорий" (и другие)
если я нашел ошибку в списке категорий на втором листе и исправил её, то на первом листе текст не меняется.
пример - на втором листе в список добавил категорию "категоррия 7"
на первом листе из списка выбрал "категоррия 7" и тут заметил опечатку. если я на втором листе в списке категорий исправлю "категоррия 7" на "категория 7", то на первом листе останется "категоррия 7".
как сделать... даже не знаю как это обозвать. автообновление что ли...
Отбой, уже нашел, если кому-то это будет полезно - снял галочки с сообщения для ввода и сообщения об ошибке в проверке данных
почему выпадающий список ActiveX возвращает текст, а не число.
перепробовал уже разные способы преобразовать текст в число, но ничего не помогло
может что-то в свойствах я не включил? Или данный способ не подходит для чисел?
Но у меня пока остался сложный вопрос:
Как сделать так, чтобы при одном только наведении курсора на поле ячейки, сразу будет всплывать список вариантов, и останется только кликнуть на один из них?
Спасибо за Ваш труд!