Поиск в списке выбора excel

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

Классический выпадающий список в ячейке листа Excel, сделанный через Данные — Проверка (Data — Validation) — простая и удобная штука, которую ежедневно применяют очень многие пользователи. Однако, у этого списка есть один весьма серьезный недостаток — в нём нет быстрого поиска по первым символам, т.е. фильтрации (отбора) только тех значений, куда введённый фрагмент входит как подстрока. Это серьезно ухудшает удобство пользования даже если в списке всего пара-тройка десятков позиций, а при нескольких сотнях убивает юзабилити напрочь.

Давайте рассмотрим как всё же реализовать подобный трюк. В качестве подопытного кролика возьмём список 250 лучших фильмов по версии IMDb:

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

Конечная цель — создать выпадающий список (ячейка G3), в котором можно будет быстро находить нужные фильмы, введя только жанр, год или фрагмент названия, например «гамп».

Шаг 1. Определяем, кто нам нужен

Сначала нам нужно понять, какие из исходных ячеек нужно показывать в списке, т.е. определить содержится ли введённый в выпадающем списке текст (например, жанр «детектив») в названии фильма. Для этого добавим слева от исходных данных еще один столбец с функцией ПОИСК (SEARCH), которая ищет заданную подстроку в тексте и выдает либо порядковый номер символа, где он был обнаружен, либо ошибку, если его там нет:

Ищем вхождения функцией ПОИСК

Теперь завернем нашу формулу в функцию проверки ЕЧИСЛО (ISNUMBER), которая превратит числа в логическую ИСТИНУ (TRUE), а ошибки — в ЛОЖЬ (FALSE):

Превращаем в ИСТИНУ и ЛОЖЬ

Теперь сделаем так, чтобы ЛОЖЬ превратилась в 0, а вместо ИСТИНА в столбце появились последовательно возрастающие индексы-числа 1,2,3… и т.д. Это можно сделать с помощью добавления к нашей же формуле ещё парочки функций:

Создаем индексы

Здесь функция ЕСЛИ (IF) проверяет что мы имеем (ИСТИНУ или ЛОЖЬ), и

  • если была ИСТИНА, то выводит максимальное значение из всех вышестоящих чисел + 1
  • если была ЛОЖЬ, то выводит 0

Шаг 2. Отбираем в отдельный список

Дальше — проще. Теперь банальной функцией ВПР (VLOOKUP) просто выведём все найденные названия (я добавил столбец с порядковыми номерами для удобства):

Извлекаем нужные элементы

После этого можно поиграться, вводя в жёлтую ячейку G2 разные слова и фразы и понаблюдать за тем, как наши формулы отбирают только подходящие фильмы:

Тестируем отбор

Шаг 3. Создаем именованный диапазон

Теперь создадим именованный диапазон, который будет ссылаться на отобранные фильмы. Для этого выбрем на вкладке Формулы команды Диспетчер имен — Создать (Formulas — Name Manager — Create):

Создаем именованный диапазон

Имя диапазона может быть любым (например, Фильмы), а самое главное — это функция СМЕЩ (OFFSET), которая и делает всю работу. Напомню её синтаксис, если вы подзабыли:

=СМЕЩ(начальная_ячейка; сдвиг_вниз; сдвиг_вправо; высота; ширина)

Синтаксис СМЕЩ

У нас:

  • В качестве начальной ячейки задаём первую ячейку списка отобранных элементов (E2).
  • Сдвиги вниз и вправо у нас отсутствуют, т.е. равны нулю.
  • Высота диапазона у нас соответствует максимальному значению индекса из столбца А.
  • Ширина диапазона — 1 столбец.

Осталось сделать выпадающий список.

Шаг 4. Создаем выпадающий список

Выделим жёлтую ячейку (G2) и выберем на вкладке Данные команду Проверка данных (Data — Validation). В открывшемся окне выбрем Список (List) в поле Тип данных (Allow), а в качестве источника введем имя нашего созданного диапазона со знаком равно перед ним:

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

Чтобы Excel не ругался при вводе на неточное совпадение наших фраз с исходным списком, на вкладке Сообщение об ошибке (Error Alert) в этом окне нужно выключить флажок Выводить сообщение об ошибке (Show error alert):

Отключаем сообщение об ошибке

Вот и всё. Можно жать на ОК и наслаждаться результатом:

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

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

P.S. 

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

Вып.список на динамических массивах

Всё, что мы делали на Шагах 1-3 заменяется одной(!) формулой, где новая функция ФИЛЬТР (FILTER) отбирает из исходного диапазона A2:A251 только те фильмы, которые содержат заданную подстроку.

А дальше останется при создании выпадающего списка указать в качестве источника первую ячейку диапазона отобранных фильмов (C2) и добавить к ней знак #, чтобы получить ссылку на весь динамический массив:

Создание вып.списка на динамическом массиве

И всё. Никаких именованных диапазонов и медленных СМЕЩ, никаких танцев с дополнительными столбцами и формулами. Песня!

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

  • Что такое динамические массивы в Excel
  • Разбор трех основных функций динамических массивов: СОРТ, ФИЛЬТР и УНИК
  • 4 способа создать выпадающий список на листе Excel

Выпадающий список в MS EXCEL на основе Проверки данных

​Смотрите также​Во-первых, созданный выпадающий ActiveX​Источник (Source)​ где то слямзил,​Выбор 2 Выбор​ = s &​ на 13​ массиве имени «города».​ же через 5​ есть похожий прототип​ не получается. Макросы,​ As Range) On​ позволит нам вводить​ я хочу… А​Спасибо.​ Источник.xlsx должен быть​ книги (это справедливо​

​При заполнении ячеек данными,​ список может находится​знак равенства и​

​ сейчас уже не​ 4​ X(i, 1) &​и получиться второй​ Файл перезалил.​ минут решаю сам​

​ … буду очень​ которые выложены в​ Error Resume Next​ новые значения.​ хочу я что​Судя по количеству​ открыт и находиться​

​ для EXCEL 2007​ часто необходимо ограничить​

А. Простейший выпадающий список — ввод элементов списка непосредственно в поле Источник

​ в двух принципиально​ имя диапазона (т.е.​ вспомню.Но если речь​Мысли на доработку​ «~» ‘формирует по​ список, а нифига​

​Виктор C​​ эту проблему)​​ признателен!!​ интернет не работают.​ If Not Intersect(Target,​Вызываем редактор Visual Basic.​​ бы при нажатии​​ просмотров, и нулевому​ в той же​

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

​ сочетанию букв в​ ((( Dim bu​​: Добрый день подскажите​​разобрался )​Заранее большущее спасибо!​ На форуме тоже​ Range(«Е2:Е9»)) Is Nothing​ Для этого щелкаем​ на ячейку появилось​

​ количеству ответов, то​​ папке, иначе необходимо​Избавимся сначала от второго​ списком значений. Например,​ режиме отладки, когда​).​​ то переменную уже​​ как реализовано):​ любом месте текста​ As Boolean Private​ как можно реализовать​нужно было просто​
​Апострофф​
​ не нашел.​

Б. Ввод элементов списка в диапазон (на том же листе, что и выпадающий список)

​ And Target.Cells.Count =​ правой кнопкой мыши​ выпадающее окно со​ что я хочу​ указывать полный путь​ недостатка – разместим​ имеется ячейка, куда​ можно настраивать его​

​Нажмите​ я добавлял.​1) Окно по​​ If UCase(txt) =​​ Sub ComboBox1_Change() End​ поиск в выпадающем​

​ изменить в свойствах​​: …​Подскажите пожалуйста как​ 1 Then Application.EnableEvents​ по названию листа​ строкой поиска и​
​ сделать… похоже нереально???​​ к файлу. Вообще​ перечень элементов выпадающего​ пользователь должен внести​ параметры и свойства,​ОК​Могу перевести на​ ширине самого длинного​ UCase(Mid(Лист1.Cells(i, 13), 1,​​ Sub Private Sub​​ списке по смыслу​ формы start up​mc-black​ сделать эту функцию​ = False If​ и переходим по​ что бы поиск​ikki​ ссылок на другие​

​ списка на другом​ название департамента, указав​ двигать его по​.​ русскийЦитатаalex1210 написал:​ значнеия​ lt)) Then s​ Worksheet_SelectionChange(ByVal Target As​ если ввести букву​ position на CenterScreen)​: Посмотрите этот пример:​

​ поиска в выпадающем​ Len(Target.Offset(0, 1)) =​ вкладке «Исходный текст».​ начинался с первых​: простыми способами -​

B. Ввод элементов списка в диапазон (на любом листе)

​ листы лучше избегать​ листе.​ где он работает.​ листу и менять​Все! Наслаждайтесь!​NomStolbDan = ActiveCell.Column​

​2) Повторный выбор​ = s &​ Range) On Error​ А в поле​

​gizon​ Выпадающий список, отфильтрованный​ списке, в каждой​ 0 Then Target.Offset(0,​ Либо одновременно нажимаем​

​ букв, а не​ нет.​ или использовать Личную​В правилах Проверки данных (также​ Логично, предварительно создать​ размеры и -​Важный нюанс. В качестве​ + 11Это: НомерСтолбцаСДанными=АктивнаяЯчейка.Столбец+11.​

​ в ячейки не​
​ X(i, 1) &​ Resume Next If​ отображались все что​​: Доброго времени суток.​​ по введенным буквам​
​ ячейке.​

  • ​ 1) = Target​​ клавиши Alt +​​ со скобок…​
  • ​можно реализовывать через​ книгу макросов Personal.xlsx​
  • ​ как и Условного​ список департаментов организации​ режиме ввода, когда​

​ источника данных для​ Если активировать ячейку​ работает, если что​ «~» ‘формирует по​

  • ​ Target.Count > 1​
  • ​ есть на букву​Прошу, подсказать, как​ Могу скорректировать его​

​Pelena​
​ Else Target.End(xlToRight).Offset(0, 1)​ F11. Копируем код​asd192​ ComboBox, обработку нажатий​ или Надстройки.​​ форматирования) нельзя впрямую​​ и позволить пользователю​ единственное, что можно​ списка может выступать​ в столбце А​

​ то выбрал выбрать​ сочетанию букв в​ Then Exit Sub​ Аэпорт, Ателье и​ в выпадающем списке​ работу, я автор​: Здравствуйте.​ = Target End​

​ (только вставьте свои​: Вроде как то,​ клавиш, перезаполнение списка​​Если нет желания присваивать​​ указать ссылку на​ лишь выбирать значения​ — выбирать из​ и динамический именованный​ тогда: НомерСтолбцаСДанными=СтолбецА+11=1+11=12=столбец№12=столбец L.​

​ еще раз​

​ начале текста Next​ If Not Intersect(Target,​ тд.​ при наборе в​ этого примера.​Посмотрите это Готовое​ If Target.ClearContents Application.EnableEvents​ параметры).Private Sub Worksheet_Change(ByVal​ что вам нужно​ и т.п.​ имя диапазону в​

​ диапазоны другого листа​​ из этого списка.​ него данные. Переключение​ диапазон, например прайс-лист.​Активируем ячейку столбца​3) Как я​ i ListBox2.List =​

​ Range(«A2:A3000»)) Is Nothing​Мотя​ нём названия города,​

​Uchimata​ решение​ = True End​ Target As Range)​ (ближе к концу​геморрой еще тот.​

  • ​ файле Источник.xlsx, то​ (см. Файл примера):​
  • ​ Этот подход поможет​ между этими режимами​ Тогда при дописывании​ В, тогда: НомерСтолбцаСДанными=СтолбецВ+11=2+11=13=столбец№13=столбец​
  • ​ понял макрос работает​ Split(s, «~») End​ Then If Target.Value​
  • ​: А что мешает​ появлялись соответствующие результаты,​:​Farvater​

​ If End Sub​ Dim lReply As​ видео)​проще так:​ формулу нужно изменить​Пусть ячейки, которые должны​ ускорить процесс ввода​ происходит с помощью​ новых товаров к​ М и т.д….​ на все ячейки,​ Sub Private Sub​ <> «» Then:​ предварительно выполнить сортировку​

​ дело в том,​mc-black​: Pelena, К сожалению​Чтобы выбранные значения показывались​ Long If Target.Cells.Count​

​http://www.planetaexcel.ru/tip.php?aid=34​
​1) иметь отсортированный​ на =ДВССЫЛ(«[Источник.xlsx]лист1!$A$1:$A$4»)​ содержать Выпадающий список,​ и уменьшить количество​ кнопки​ прайсу, они будут​Столбец()=порядковый номер столбца​ как ограничить диапазон​ ListBox2_Click() If ListBox2.ListIndex​ Me.TextBox1.Visible = False:​ данных в этом​ что перед городами,​, Да ваш макрос​ я туп в​ снизу, вставляем другой​ > 1 Then​boulingist​ список.​СОВЕТ:​ размещены на листе​ опечаток.​Режим Конструктора (Design Mode)​ автоматически добавляться к​ начиная от левого​ выдающих значений, если​ = -1 Then​

​ Me.ListBox1.Visible = False:​​ списке?​
​ поселками и прочими​ очень хорош!если можно​ Excel. Не понимаю​ код обработчика.Private Sub​ Exit Sub If​: Супер ссылка!!! сейчас​2) при большом​Если на листе​ Пример,​Выпадающий список можно создать​на вкладке​

​ выпадающему списку. Еще​ края листа​ диапазонов и векторов​ Exit Sub bu​ Exit Sub bu​Виктор C​ стоит г., п.​ както скорректировать было​ как с макросами​ Worksheet_Change(ByVal Target As​ Target.Address = «$C$2″​

​ просматриваю всё. Огромное​ списке — разбивать​ много ячеек с​а диапазон с перечнем​ с помощью Проверки​Разработчик (Developer)​ одним часто используемым​alex1210​ результатов будет несколько?​ = True ActiveCell.Value​ = True With​: ничего не мешает​ и т.д., а​ бы прекрасно.нельзя ли​ работать.​ Range) On Error​ Then If IsEmpty(Target)​ спасибо!!!​

excel2.ru

как в сделать выпадающий список с функцией поиска?

​ его на двух-трехуровневую​​ правилами Проверки данных,​
​ элементов разместим на​ данных ​
​:​ трюком для таких​: Понял, спасибо большое​Было бы очень​ = ListBox2.Value Me.TextBox2.Visible​ Me.TextBox1 .Top =​ это так к​ список очень большой.​ сделать так чтобы​Вы не могли​ Resume Next If​ Then Exit Sub​Теперь бы еще​ иерархию. соответственно, работать​ то можно использовать​ другом листе (на​или с помощью элемента​Если эта кнопка нажата,​ списков является создание​gling​ круто​ = False Me.ListBox2.Visible​ Target.Top .Left =​
​ примеру у меня​Udik​ при выборе ячейки,нажав​
​ бы на примере​ Not Intersect(Target, Range(«Н2:К2»))​ If WorksheetFunction.CountIf(Range(«Деревья»), Target)​ с календарем так​ с двумя связанными​ инструмент Выделение группы​ листе Список в​ управления формы Поле​ то мы можем​ связанных выпадающих списков​
​: Жмете вкладку Разработчик—Режим​
​alex1210​
​ = False bu​ Target.Left .Height =​ 10 слов на​: Вы хотите автодополнение,​ на кнопку таб​

​ моей таблице написать​​ Is Nothing And​ = 0 Then​
​ же разобраться…​ списками — выбирать​ ячеек (Главная/ Найти​ файле примера).​
​ со списком (см.​
​ настраивать параметры выпадающего​
​ (когда содержимое одного​ конструктора—Ctrl+клик на форму​
​: phelex, прикольный код​ = False End​ Target.Height .Width =​ букву А, а​ это только через​ (например) появлялась ваша​ подробнее как это​ Target.Cells.Count = 1​ lReply = MsgBox(«Добавить​

​Под выпадающим списком понимается​​ сначала регион, а​ и выделить/ Выделение​Для создания выпадающего списка,​ статью Выпадающий (раскрывающийся)​ списка, нажав соседнюю​ списка меняется в​ ЛКМ (левой кнопкой​alex1210​

​ Sub​​ Target.Width .Text =​ есть очень большие​ макросы.​
​ форма.И выбрав нужное​​ делать.​​ Then Application.EnableEvents =​
​ введенное имя «​
​ содержание в одной​ потом — города​
​ группы ячеек). Опция​ элементы которого расположены​ список на основе​
​ кнопку​ зависимости от выбора​
​ мыша)—Копируем (Ctrl+C)—Вставляем (Ctrl+V).​: А если база​
​gling​ Target.Value .Activate End​
​ справочники листать их​
​bmv98rus​ слово в ней​Из листа «города»​ False If Len(Target.Offset(1,​ & _ Target​ ячейке нескольких значений.​

​ из этого региона.​​ Проверка данных этого​ на другом листе,​ элемента управления формы).​

​Свойства (Properties)​​ в другом).​ Возможно есть и​ на другой странице,​: Для столбца А​
​ With With Me.ListBox1​ не всегда удобно​: Использовать VBA и​ нажав enter это​
​ мне нужно переносить​ 0)) = 0​ & » в​ Когда пользователь щелкает​boulingist​ инструмента позволяет выделить​ можно использовать два​
​В этой статье создадим​, которая откроет окно​Этот способ представляет собой​ другой вариант, но​​ например лист2 с​​ и В разные​
​ .Top = Target.Top​​ и не быстро​​ Combobox. Стандартый выпадающий​ слово автоматом забилось​ сцепленные ячейки с​ Then Target.Offset(1, 0)​
​ выпадающий список?», vbYesNo​​ по стрелочке справа,​​: Прошу простить не​ ячейки, для которых​​ подхода. Один основан​​ Выпадающий список с​ со списком всех​ вставку на лист​

​ я делаю так.​​ первого столбца.. что​ списки, Box используются​ .Left = Target.Left​

​Виктор C​​ список таким функционалом​
​ бы в ячейку.​ данными, в лист​ = Target Else​ + vbQuestion) If​ появляется определенный перечень.​

​ совсем далекого человека​​ проводится проверка допустимости​ на использовании Именованного​ помощью Проверки данных​ возможных настроек для​ нового объекта -​Ch.​ надо изменить?​
​ те же. Private​ + Target.Width .Clear​: вопрос снят нашел​ не обладает.​mc-black​ «данные», начиная со​ Target.End(xlDown).Offset(1, 0) =​ lReply = vbYes​ Можно выбрать конкретное.​ в делах компьютерных…​ данных (заданная с​ диапазона, другой –​ (Данные/ Работа с​ выделенного объекта:​ элемента управления «поле​: Спасибо Вам за​

​gling​​ Sub TextBox1_Change() Dim​ End With bu​ тут способ №4​gizon​
​: Вот, немного переделано​

​ K9 и до​​ Target End If​ Then Range(«Деревья»).Cells(Range(«Деревья»).Rows.Count +​Очень удобный инструмент Excel​
​ но что есть​ помощью команды Данные/​ функции ДВССЫЛ().​

CyberForum.ru

Выпадающий список в Excel с помощью инструментов или макросов

​ данными/ Проверка данных)​Самые нужные и полезные​ со списком» с​ исчерпывающий ответ.​: Если много разных​ X, i, txt​ = False Me.TextBox1.Visible​

​gling​: Спасибо, поищу в​Окно поиска появляется​ K1300, что бы​ Target.ClearContents Application.EnableEvents =​ 1, 1) =​ для проверки введенных​ комбобокс, и есть​ Работа с данными/​Используем именованный диапазон​

Создание раскрывающегося списка

​ с типом данных​ свойства, которые можно​ последующей привязкой его​phelex​ списков, тогда лучше​

Создание выпадающего списка.

​ As String, lt,​ = True Me.ListBox1.Visible​: Здравствуйте. А комбобокс​ инете примеры.​

  1. ​ по Ctrl+J, закрывается​ выпадал у меня​Ввод значений.
  2. ​ True End If​ Target End If​ данных. Повысить комфорт​ ли пошаговая инструкция​Проверка вводимых значений.
  3. ​ Проверка данных). При​Создадим Именованный диапазон Список_элементов,​ Список.​ и нужно настроить:​

Имя диапазона. Раскрывающийся список.

​ к диапазонам на​: gling, больше спасибо​

​ так. Переменную назвал​

Выпадающий список в Excel с подстановкой данных

​ s As String​ = True Else​ не устраивает? Или​Не думаю, что​ при любом конечном​ этот список с​ End Sub​ End If End​

  1. ​ работы с данными​ как реализовать задумочку​ выборе переключателя Всех​ содержащий перечень элементов​Форматировать как таблицу.
  2. ​Выпадающий список можно сформировать​ListFillRange​ листе. Для этого:​ за ваши ответы.​ НомерСтолбцаДанных (NomStolbDan), чтоб​ If Len(TextBox1.Text) =​ Me.TextBox1.Visible = False​ выпадающих списков много?​ подойдет combobox, ведь​ выборе или просто​ поиском.​Чтобы выбираемые значения отображались​ If End Sub​Выпадающий список.
  3. ​ позволяют возможности выпадающих​ мою?​ будут выделены все​ выпадающего списка (ячейки​ по разному.​- диапазон ячеек,​В Excel 2007/2010 откройте​Уточните пожалуйста, а​

Ввод значения в источник.

​ понятно было что​ 0 Or bu​ Me.ListBox1.Visible = False​

Список и таблица.

​ Если списков много​ у меня много​

Добавлено значение елка.

​ по Esc.​

Удалено значение береза.

​Уже 2 неделю​ в одной ячейке,​Сохраняем, установив тип файла​

​ списков: подстановка данных,​ikki​ такие ячейки. При​A1:A4​Самым простым способом создания​ откуда берутся данные​ вкладку​

Ввод данных из списка.

  1. ​ возможно так сделать​ менять.​ Then Exit Sub​ End If End​ то можно тот​Создание имени.
  2. ​ ячеек, в которых​Uchimata​ пытаюсь с разными​ разделенные любым знаком​ «с поддержкой макросов».​
  3. ​ отображение данных другого​: панель инструментов «Элементы​ выборе опции Этих​на листе Список).​ Выпадающего списка является​ для списка. Выделить​Разработчик (Developer)​Сообщение об ошибке.
  4. ​ взаимозависимые списки?​Private Sub TextBox1_Change()​ txt = TextBox1.Text​ Sub Private Sub​ же комбобокс, но​ заполняется город, поищу​: Да!Это гениально!если будут​ макросами, которые предлагают​ препинания, применим такой​Переходим на лист со​ листа или файла,​ управления» — кнопка​ же выделяются только​Для этого:​ ввод элементов списка​ мышью диапазон он​. В более ранних​Что для этого​ Dim X, i,​ lt = Len(TextBox1.Text)​ TextBox1_Change() Dim X,​ с макросом по​ макрос.​ вопросы буду обращаться!Спасибо​ люди, по разным​ модуль.​ списком. Вкладка «Разработчик»​ наличие функции поиска​ «Поле со списком»​ те ячейки, для​выделяем​ непосредственно в поле​ не даст, надо​
  5. ​ версиях — панель​ требуется?​Сообщение об ошибке.
  6. ​ txt As String,​ If ActiveCell.Column =​ i, txt As​ событию активации ячейки.​bmv98rus​ Вам большое!!​ формулам, все не​Private Sub Worksheet_Change(ByVal​

Макрос.

​ — «Код» -​ и зависимости.​у​ которых установлены те​А1:А4​ Источник инструмента Проверка​

​ просто вписать его​ инструментов​Спасибо​

Выпадающий список в Excel с данными с другого листа/файла

​ lt, s As​ 1 Then X​ String, lt, s​ А уж коли​: Эта «штуковина» должна​mc-black​ работает. Либо текс​ Target As Range)​ «Макросы». Сочетание клавиш​Путь: меню «Данные» -​меня​

  1. ​ же правила проверки​,​ данных.​
  2. ​ руками с клавиатуры​Формы (Forms)​balzaminka​

​ String, NomStolbDan As​ = Лист1.Columns(12).SpecialCells(2).Value For​ As String If​ использовать макрос то​ появится, когда вы​: Сделал так, что​ бокс в одной​On Error Resume​ для быстрого вызова​ инструмент «Проверка данных»​

Как сделать зависимые выпадающие списки

​пошаговой — нет.​

Три именованных диапазона.

​ данных, что и​нажимаем Формулы/ Определенные имена/​Предположим, в ячейке​ (например, Лист2!A1:A5)​через меню​: Добрый день!​ Long If Len(TextBox1.Text)​ i = 1​

  1. ​ Len(TextBox1.Text) = 0​ и формирование списка​ попадаете в определенную​Список диапазонов.
  2. ​ будет брать текст​ ячейке предлагают, а​ Next​ – Alt +​ — вкладка «Параметры».​Таблица со списком.
  3. ​но примерно так:​ для активной ячейки.​ Присвоить имя​B1​LinkedCell​Вид — Панели инструментов​Модераторам — извиняюсь​ = 0 Or​ To Лист1.Cells(Rows.Count, 12).End(xlUp).Row​ Or bu Then​ можно ему доверить,​ ячейку и при​ из колонки на​Второй раскрывающийся список.

    Выбор нескольких значений из выпадающего списка Excel

    ​ мне то нужно​If Not Intersect(Target,​ F8. Выбираем нужное​ Тип данных –​0) изучить основы​

    1. ​Примечание​в поле Имя вводим​необходимо создать выпадающий​- связанная ячейка,​ — Формы (View​ за свою невнимательность,​ bu Then Exit​ ‘If InStr(1, UCase(Лист1.Cells(i,​ Exit Sub txt​ пусть сортирует только​ выборе пропасть, поместив​ две левее выбранной​ в каждой что​ Range(«C2:C5»)) Is Nothing​ имя. Нажимаем «Выполнить».​ «Список».​ VBA;​:​ Список_элементов, в поле​ список для ввода​ куда будет выводиться​ — Toolbars -​ приношу извинения всем​ Sub txt =​ 12)), UCase(TextBox1.Value)) >​ = TextBox1.Text lt​
    2. ​ соответствующие первым буквам.​ в эту ячейку​ ячейки. То есть​ бы выпадал это​ And Target.Cells.Count =​Когда мы введем в​Ввести значения, из которых​1) изучить свойства​Если выпадающий список​ Область выбираем Книга;​ единиц измерений. Выделим​ выбранный из списка​ Forms)​ за свои ошибки…​ TextBox1.Text lt =​ 0 Then s​ = Len(TextBox1.Text) X​ Подобные темы уже​ результат.​
    3. ​ в колонке C​ список с поиском.​ 1 Then​ пустую ячейку выпадающего​ будет складываться выпадающий​
      ​ и события объекта​ содержит более 25-30​
      ​Теперь на листе Пример,​ ячейку​
      ​ элемент​. Если этой вкладки​Вопрос - как​ Len(TextBox1.Text) NomStolbDan =​
      ​ = s &​
      ​ = Лист1.Columns(12).SpecialCells(2).Value For​
      ​ были на форуме.​
      ​Nic70y​
      ​ список брать из​Буду Вам очень​Application.EnableEvents = False​
      ​ списка новое наименование,​ список, можно разными​ ComboBox;​
      ​ значений, то работать​
      ​ выделим диапазон ячеек,​
      ​B1​
      ​ListRows​ не видно, то​
      ​ сделать в обычной​
      ​ ActiveCell.Column + 11​
      ​ X(i, 1) &​

    ​ i = 1​Виктор C​: на сайте есть:​ A, в D​ признателен.​newVal = Target​

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

    1. ​ появится сообщение: «Добавить​ способами:​2) вставить элемент​ с ним становится​ которые будут содержать​и вызовем Проверку​Вставить ActiveX.
    2. ​- количество отображаемых​ нажмите кнопку​ таблице выпадающий список​ X = Лист1.Columns(NomStolbDan).SpecialCells(2).Value​ «~» ‘формирует по​ To Лист1.Cells(Rows.Count, 12).End(xlUp).Row​Элемент ActiveX.
    3. ​: gling,не силен в​http://www.excelworld.ru/board/vba/tricks/find_in_database/9-1-0-27​Свойства ActiveX.
    4. ​ из B и​Юрий М​Application.Undo​ введенное имя баобаб​Вручную через «точку-с-запятой» в​ на лист;​ неудобно. Выпадающий список​ Выпадающий список.​

    ​ данных.​

    ​ строк​Офис — Параметры Excel​ с контекстным поиском?​ For i =​ сочетанию букв в​ ‘If InStr(1, UCase(Лист1.Cells(i,​ макросах(( я головой​Wasilich​ так далее. Исходный​: Добрый день всем​

    exceltable.com

Выпадающий список в каждой ячейке с функции поиска. (Формулы/Formulas)

​oldval = Target​​ в выпадающий список?».​
​ поле «Источник».​3) написать макросы​ одновременно отображает только​вызываем Проверку данных;​
​Если в поле Источник​Font​-​buchlotnik​ 1 To Лист1.Cells(Rows.Count,​ любом месте текста​ 12)), UCase(TextBox1.Value)) >​ понимаю что формулами​: Это как понимать?​ диапазон задается в​ любителям Excel !​
​If Len(oldval) <>​Нажмем «Да» и добавиться​Ввести значения заранее. А​ обработки нужных событий;​ 8 элементов, а​в поле Источник вводим​ указать через точку​- шрифт, размер,​флажок​: поиском религия пользоваться​ NomStolbDan).End(xlUp).Row ‘If InStr(1,​
​ If UCase(txt) =​ 0 Then s​ не все и​ В разных столбцах,​ cmbFind_Enter()​

​ В связи с​​ 0 And oldval​
​ еще одна строка​ в качестве источника​

​4) отладить, протестировать,​​ чтобы увидеть остальные,​ ссылку на созданное​ с запятой единицы​ начертание (курсив, подчеркивание​Отображать вкладку Разработчик на​
​ не позволяет?​ UCase(Лист1.Cells(i, NomStolbDan)), UCase(TextBox1.Value))​ UCase(Mid(Лист1.Cells(i, 12), 1,​ = s &​ не всегда сделать.​
​ что ли?​Султанов​ проявленным интересом планетян​ <> newVal Then​ со значением «баобаб».​ указать диапазон ячеек​ запустить;​ нужно пользоваться полосой​ имя: =Список_элементов.​ измерения шт;кг;кв.м;куб.м, то​
​ и т.д. кроме​ ленте (Office Button​тыц​ > 0 Then​ lt)) Then s​ X(i, 1) &​ Сейчас делаю автоматизацию​Gustav​:​ к теме: «Альтернатива​Target = Target​Когда значения для выпадающего​
​ со списком.​5) enjoy it!​

excelworld.ru

Альтернатива выпадающему списку (форма с поиском)_2 [GIG_ant]

​ прокрутки, что не​​Примечание​ выбор будет ограничен​ цвета)​ — Excel Options​тыцтыц​ s = s​ = s &​ «~» ‘формирует по​ производственных процессов на​: Стесняюсь спросить, а​Uchimata​ выпадающему списку (форма​ & «,» &​ списка расположены на​Назначить имя для диапазона​впрочем — интернет​ всегда удобно.​Если предполагается, что​ этими четырьмя значениями.​ForeColor​ — Show Developer​У кого мало времени​ & X(i, 1)​ X(i, 1) &​ сочетанию букв в​ ходу. Обучаться макросам​ просто «вычистить» исходный​, вот к примеру​ с поиском)» (смотреть​ newVal​ другом листе или​ значений и в​ большой, задача не​В EXCEL не предусмотрена​ перечень элементов будет​Теперь смотрим, что получилось.​и​ Tab in the​ и нужно быстро​ & «~» ‘формирует​ «~» ‘формирует по​ любом месте текста​ в данный период​ список от «г.»​

​ с открытым кодом,​​ тут: ), решил​Else​ в другой книге,​ поле источник вписать​​ слишком оригинальная, скорее​

​ регулировка размера шрифта​​ дополняться, то можно​ Выделим ячейку​BackColor​ Ribbon)​​ ухватить суть -​​ по сочетанию букв​

planetaexcel.ru

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

​ сочетанию букв в​​ If UCase(txt) =​ времени не имею​ и «п.» что-то​ инструкция внутри файла​ создать тему с​Target = newVal​ стандартный способ не​ это имя.​ всего, где-то уже​ Выпадающего списка. При​ сразу выделить диапазон​B1​- цвет текста​Найдите значок выпадающего списка​ смотрим обучающее видео:​ в любом месте​ начале текста Next​ UCase(Mid(Лист1.Cells(i, 12), 1,​
​ свободного времени​ мешает? Если же​Uchimata​ получившейся в процессе​
​End If​

​ работает. Решить задачу​​Любой из вариантов даст​

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

​ текста If UCase(txt)​​ i Else X​​ lt)) Then s​​gling​ окончательный изюм именно​: Снова добрый день!Есть​ долгих прений, добавлений​If Len(newVal) =​ можно с помощью​ такой результат.​ пример​ имеет смысл сортировать​А1:А10​ справа от ячейки​Большим и жирным плюсом​ форм (не ActiveX!).​

​ нюансы всех описанных​​ = UCase(Mid(Лист1.Cells(i, NomStolbDan),​
​ = Лист1.Columns(13).SpecialCells(2).Value For​ = s &​: Вот вариант того​ в них, то​ вопрос:а можно ли​

​ и исправлений, надстройкой.​​ 0 Then Target.ClearContents​ функции ДВССЫЛ: она​​

​boulingist​​ список элементов и​. Однако, в этом​ появляется квадратная кнопка​ этого способа является​ Ориентируйтесь по всплывающим​ способов — дальше​ 1, lt)) Then​ i = 1​ X(i, 1) &​ о чем писал.​ можно эти приставки​ вместо выпадающего списка​

​ Данная надстройка предоставляет​​Application.EnableEvents = True​​ сформирует правильную ссылку​​Необходимо сделать раскрывающийся список​: я правильно понимаю,​ использовать дополнительную классификацию​

​ случае Выпадающий список​​ со стрелкой для​ возможность быстрого перехода​ подсказкам -​ по тексту.​
​ s = s​ To Лист1.Cells(Rows.Count, 13).End(xlUp).Row​
​ «~» ‘формирует по​
​ При вводе первых​ хранить в соседнем​ сделать календарь?​
​ возможность вставлять значения​End If​ на внешний источник​ со значениями из​ что речь идет​ элементов (т.е. один​ может содержать пустые​ выбора элементов из​
​ к нужному элементу​Поле со списком​Один щелчок правой кнопкой​ & X(i, 1)​ ‘If InStr(1, UCase(Лист1.Cells(i,​ сочетанию букв в​ букв предлагается вариант.​ столбце и подтягивать​в интернете нашел​

​ из ранее созданных​​End Sub​ информации.​

​ динамического диапазона. Если​​ об excel?​​ выпадающий список разбить​​ строки.​ выпадающего списка.​ в списке при​:​
​ мыши по пустой​ & «~» ‘формирует​ 12)), UCase(TextBox1.Value)) >​ начале текста Next​ Но лучше когда​ их в место​ очень хороший вариант​ списков в текущую​Не забываем менять диапазоны​Делаем активной ячейку, куда​ вносятся изменения в​ikki​
​ на 2 и​Избавиться от пустых строк​Недостатки​ вводе первых букв​Щелкните по значку​ ячейке под столбцом​ по сочетанию букв​
​ 0 Then s​ i ListBox1.List =​ список отсортирован,близкие по​ вставки уже после​http://bourabai.kz/einf/excel/5_4.htm​
​ ячейку листа. Запуск​ на «свои». Списки​ хотим поместить раскрывающийся​ имеющийся диапазон (добавляются​: не знаю, как​
​ более).​ и учесть новые​этого подхода: элементы​ с клавиатуры(!), чего​
​ и нарисуйте небольшой​
​ с данными, команда​ в начале текста​ = s &​ Split(s, «~») End​

CyberForum.ru

Поиск по названию города в выпадающем списке (Формулы/Formulas)

​ значениям будут рядом​​ выбора из списка.​
​но для этого​ надстройки производится несколькими​ создаем классическим способом.​ список.​ или удаляются данные),​ Вы, а я​Например, чтобы эффективно работать​ элементы перечня позволяет​ списка легко потерять​ нет у всех​ горизонтальный прямоугольник -​

​ контекстного меню​​ Next i ListBox1.List​ X(i, 1) &​ Sub Private Sub​

​ в раскрывающемся списке.​​Wasilich​ нужно скачивать Элемент​ способами: 1) Сочетанием​ А всю остальную​

​Открываем параметры проверки данных.​​ они автоматически отражаются​ именно об Excel’е​
​ со списком сотрудников​ Динамический диапазон. Для​ (например, удалив строку​ остальных способов. Приятным​ будущий список.​Выбрать из раскрывающегося списка​

​ = Split(s, «~»)​​ «~» ‘формирует по​ ListBox1_Click() If ListBox1.ListIndex​Виктор C​: не получится. Быстрей​ управления Календарь.​ клавиш CTRL+SHIFT+R 2)​ работу будут делать​

​ В поле «Источник»​​ в раскрывающемся списке.​
​ толкую​

​ насчитывающем более 300​​ этого при создании​ или столбец, содержащие​ моментом, также, является​

​Щелкните по нарисованному списку​​(Choose from drop-down list)​ End Sub​ сочетанию букв в​ = -1 Then​: gling, я типа​ всего придется использовать​Мне это нельзя​ ДаблКликом (можно отключить​ макросы.​ вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).​Выделяем диапазон для выпадающего​правда, «панель инструментов»​ сотрудников, то его​

​ Имени Список_элементов в​​ ячейку​ возможность настройки визуального​ правой кнопкой мыши​или нажать сочетание​alex1210​

​ любом месте текста​​ Exit Sub bu​​ того уже сделал​​ форму. Ну типа​
​ делать,т.к если я​ в настройках) 3)​На вкладке «Разработчик» находим​Имя файла, из которого​ списка. В главном​ — это для​ следует сначала отсортировать​ поле Диапазон необходимо​

​B1​​ представления (цветов, шрифтов​
​ и выберите команду​

​ клавиш​​: Не получается данные​​ If UCase(txt) =​​ = True ActiveCell.Value​
​ с помощью элемента​ так, хотя возможны​

​ передам этот файл​​ Нажатием на строку​
​ инструмент «Вставить» –​ берется информация для​ меню находим инструмент​ версий 2003 и​ в алфавитном порядке.​ записать формулу =СМЕЩ(Список!$A$1;;;СЧЁТЗ(Список!$A:$A))​); не удобно вводить​ и т.д.)​Формат объекта (Format control)​ALT+стрелка вниз​ из листа 2​ UCase(Mid(Лист1.Cells(i, 13), 1,​ = ListBox1.Value Me.TextBox1.Visible​ ActiveX​ разные варианты.​
​ тому у кого​ меню «Поиск в​ «ActiveX». Здесь нам​ списка, заключено в​ «Форматировать как таблицу».​ старше.​ Затем создать выпадающий​Использование функции СЧЁТЗ() предполагает,​ большое количество элементов.​При использовании этого способа,​. В появившемся диалоговом​
​. Способ не работает,​ брать.Подскажите что в​ lt)) Then s​ = False Me.ListBox1.Visible​gling​bmv98rus​

excelworld.ru

Выпадающий список с возможностью поиска внутри списка

​ этого элемента не​​ выпадающем списке», находящейся​ нужна кнопка «Поле​ квадратные скобки. Этот​Откроются стили. Выбираем любой.​для 2007/2010 -​ список, содержащий буквы​ что заполнение диапазона​ Подход годится для​ также возможно указывать​ окне задайте​

​ если ячейку и​​ коде надо изменить​ = s &​ = False bu​: Посмотрите еще вариант.​

​:​​ будет,то у него​ на вкладке «Сервис»​ со списком» (ориентируемся​ файл должен быть​ Для решения нашей​ где-то в другом​ алфавита. Второй выпадающий​ ячеек (​ маленьких (3-5 значений)​

​ в качестве​​Формировать список по диапазону​ столбец с данными​

​gling​​ X(i, 1) &​ = False End​ Для работы нужно​Wasilich​ не получится использовать​ в 2003 Excel​ на всплывающие подсказки).​ открыт. Если книга​ задачи дизайн не​ месте (не спрашивайте​ список должен содержать​A:A​ неизменных списков.​ListFillRange​- выделите ячейки​ отделяет хотя бы​

​: Вместо Лист1 напишите​​ «~» ‘формирует по​ Sub Dim bu​ активировать ячейку в​,​ календарь.​ и на вкладке​Щелкаем по значку –​ с нужными значениями​ имеет значения. Наличие​ меня — где?​ только те фамилии,​

​), который содержит элементы,​​Преимущество​не только одномерные​ с наименованиями товаров,​ одна пустая строка​ имя листа с​ сочетанию букв в​ As Boolean Private​ столбце А. Писал​

​А форму то​​Вопрос:можно ли сделать​ «Надстройки» в 2007.​ становится активным «Режим​ находится в другой​

​ заголовка (шапки) важно.​​ — я всё​ которые начинаются с​ ведется без пропусков​: быстрота создания списка.​ диапазоны. Можно, например​ которые должны попасть​ или вам нужен​ данными Sheets(«имя листа»).​ начале текста Next​ Sub ComboBox2_Change() End​ не я, где​ зачем? CB на​ то же самое​ Так же в​ конструктора». Рисуем курсором​ папке, нужно указывать​ В нашем примере​ равно не знаю),​ буквы, выбранной первым​ строк (см. файл​Элементы для выпадающего списка​ задать диапазон из​ в список​ товар, который еще​alex1210​

​ i End If​​ Sub Private Sub​ то слямзил, сейчас​ лист. Активацию при​ что и в​ надстройке реализован поиск​ (он становится «крестиком»)​ путь полностью.​ это ячейка А1​ но аналогично.​ списком. Для решения​ примера, лист Динамический​ можно разместить в​

​ двух столбцов и​​Связь с ячейкой​ ни разу не​: Разобрался))))​ ListBox1.List = Split(s,​

​ Worksheet_SelectionChange(ByVal Target As​​ уже не вспомню.​ выбору ячеки с​ http://bourabai.kz/einf/excel/5_4.htm только использовать​ необходимого значения из​
​ небольшой прямоугольник –​
​Возьмем три именованных диапазона:​
​ со словом «Деревья».​
​ещё раз: в​ такой задачи может​
​ диапазон).​ диапазоне на листе​ нескольких строк, указав​- укажите ячейку​ вводился выше:​gling​ «~») End Sub​ Range) On Error​ Спасибо автору, мне​ устновкой координат по​ в качестве элемента​ списка, по частичному​ место будущего списка.​Это обязательное условие. Выше​ То есть нужно​ списке, появляющемся при​ быть использована структура​Используем функцию ДВССЫЛ()​ EXCEL, а затем​ дополнительно, что выводить​ куда нужно выводить​Выделите ячейки с данными,​: А спасибо где?​Виктор C​ Resume Next If​ очень понравилось по​ ячеке, ну и​ например LDDate?Подразумеваю что​ совпадению с критерием​Жмем «Свойства» – открывается​ описано, как сделать​ выбрать стиль таблицы​ использовании «проверки данных»,​ Связанный список или​Альтернативным способом ссылки на​ в поле Источник​ нужно два столбца​ порядковый номер выбранного​ которые должны попасть​Эх молодежь!​: gling, все красиво,​ Target.Count > 1​ этому и сохранил.​ фильтр CB при​ можно,но тогда нужно​ поиска. Код позиционирования​ перечень настроек.​ обычный список именованным​ со строкой заголовка.​ задумку не реализовать​ Вложенный связанный список.​ перечень элементов, расположенных​ инструмента Проверки данных​ (свойство​ пользователем элемента.​ в выпадающий список​alex1210​ я я еще​ Then Exit Sub​ Можно настроить сочетание​ вводе.​ изменить чтото в​ основной формы любезно​Вписываем диапазон в строку​ диапазоном (с помощью​ Получаем следующий вид​никак​boulingist​ на другом листе,​ указать ссылку на​ColumnCount​Количество строк списка​ (например, наименованиями товаров).​: Так я ещё​ добавил столбец изменил​ If Not Intersect(Target,​ только с начала​Wasilich​ коде.​ предоставил многоуважаемый Nerv.​ ListFillRange (руками). Ячейку,​ «Диспетчера имен»). Помним,​ диапазона:​.​: Всем здравствовать желаю!​ является использование функции​ этот диапазон.​=2). Тогда можно получить​- сколько строк​Если у вас Excel​ не всё)))))))​ макрос, теперь получилось​ Range(«B2:B3000»)) Is Nothing​ текста ищет и​: Так, яж написал:​Апострофф​ Код сортировки (QuickSortNonRecursive)​ куда будет выводиться​ что имя не​Ставим курсор в ячейку,​существуют​Господа и дамы,​ ДВССЫЛ(). На листе​Предположим, что элементы списка​ весьма привлекательные результаты,​ показывать в выпадающем​ 2003 или старше​alex1210​ что каждая ячейка​ Then If Target.Value​ формирует список, а​Ваши предложения…​: Авторские программы, библиотеки,​ используемый в надстройке,​ выбранное значение –​ может содержать пробелов​ где будет находиться​обходные​ вопрос такой:​ Пример, выделяем диапазон​ шт;кг;кв.м;куб.м введены в​ окупающие все потраченные​ списке. По умолчанию​ — выберите в​: Вот просто код​ выпадающий список и​ <> «» Then:​ можно по сочетанию​bmv98rus​ надстройки и шаблоны​ взят отсюда: ,​ в строку LinkedCell.​ и знаков препинания.​ выпадающий список. Открываем​пути — сложные,​хочу сделать в​ ячеек, которые будут​ ячейки диапазона​ на дополнительные настройки​ — 8, но​ меню​ у Вас интересный​ смешались источники данных​ Me.TextBox2.Visible = False:​ внутри текста. При​:​Uchimata​ за что отдельное​ Для изменения шрифта​Создадим первый выпадающий список,​ параметры инструмента «Проверка​

​ муторные, но в​​ excel 2010 что​ содержать выпадающий список,​A1:A4​ усилия:​ можно больше, чего​Вставка — Имя -​ , а почему​ столбец M и​ Me.ListBox2.Visible = False:​ активации заполненной ячейки​Wasilich​:​ спасибо участвовавшим в​ и размера –​ куда войдут названия​ данных» (выше описан​ конечном итоге дающие​ бы при нажатии​ вызываем Проверку данных,​, тогда поле Источник​Способ 1.​ не позволяет предыдущий​ Присвоить​ Вы его так​ N теперь подставляет​ Exit Sub bu​ ЛистБокс и ТекстБокс​,​mc-black​ его разработке: ZVI,​ Font.​ диапазонов.​ путь). В поле​ нужный результат.​ на ячейку, в​ в Источнике указываем​ будет содержать =лист1!$A$1:$A$4​Примитивный​ способ.​(Insert — Name -​ записали? Я просто​ из двух столбцов​ = True With​ не появятся, ну​Пардон, утро, не​, возник вопрос по​ слэн, Pavel55.​Скачать пример выпадающего списка​Когда поставили курсор в​ «Источник» прописываем такую​Вам нужно сделать​ определенном столбце, что​ =ДВССЫЛ(«список!A1:A4»).​Преимущество​Способ 2.​После нажатия на​ Define),​

​ учусь програмировать и​​ и каждая ячейка​ Me.TextBox2 .Top =​ это можете настроить​ дочитал :-)​ Вашему списку.Нашел небольшой​Юрий М​При вводе первых букв​ поле «Источник», переходим​ функцию:​выбор​ бы выходил выпадающий​Недостаток​: наглядность перечня элементов​Стандартный​ОК​если Excel 2007​ хочу понять как​ стала выпадающей. Объясните​ Target.Top .Left =​ под свои нужды,​Perfect2You​ недочет в ее​: Удобный поиск в​ с клавиатуры высвечиваются​ на лист и​Протестируем. Вот наша таблица​- забить на​ список всех городов​

​: при переименовании листа​​ и простота его​Способ 3.​списком можно пользоваться.​
​ или новее -​ и что NomStolbDan​ тупому ))) какие​
​ Target.Left .Height =​ например на двойной​
​: Сделал без макросов.​ появлении.​
​ выпадающем списке ВЕРСИЯ​ подходящие элементы. И​
​ выделяем попеременно нужные​ со списком на​
​ это дело​ россии. (впринципе, я​
​ – формула перестает​ модификации. Подход годится​Элемент управления​
​Чтобы вместо порядкового номера​ откройте вкладку​ = ActiveCell.Column +​
​ переменные нужно менять​ Target.Height .Width =​ клик очищать ячейку​На листе Лист1​При выборе ячейки​
​ 12.1 (надстройка для​ это далеко не​ ячейки.​ одном листе:​или​ его сделал, но​ работать. Как это​
​ для редко изменяющихся​Способ 4.​:)

​ элемента выводилось его​​Формулы (Formulas)​

​ 11​​ в макросе чтоб​ Target.Width .Text =​ и отображать Боксы.​ в ячейку B1​ расположенных ~ до​

​ 2007)​​ все приятные моменты​Теперь создадим второй раскрывающийся​Добавим в таблицу новое​пойти обходными путями​ есть существенный минус,​ можно частично обойти​
​ списков.​Элемент ActiveX​ название можно дополнительно​и воспользуйтесь кнопкой​Ch.​ например столбец А​ Target.Value .Activate End​ Экспериментируйте.​ вводится условие. Выпадающий​ 100 строки форма​[GIG_ant]​ данного инструмента. Здесь​ список. В нем​ значение «елка».​ (если Вы готовы,​ там нет строки​ см. в статье​Недостатки​Сложность​ использовать функцию​Диспетчер имен (Name Manager)​: Добрый день, уважаемые​ с выпадающим списком​ With With Me.ListBox2​Виктор C​ список отображает только​ появляется на экран​Юрий М​ можно настраивать визуальное​ должны отражаться те​Теперь удалим значение «береза».​ кшн).​ поиска. А сделал​ Определяем имя листа.​

​: если добавляются новые​​низкая​ИНДЕКС (INDEX)​, затем​ форумчане. В рамках​

​ A брал переменные​​ .Top = Target.Top​: gling, круто вообще!!!​ соответствующее условию или​

​ но соответственно ее​​: Удобный поиск в​

​ представление информации, указывать​​ слова, которые соответствуют​
​Осуществить задуманное нам помогла​

​boulingist​​ вот что: на​Ввод элементов списка в​

​ элементы, то приходится​​средняя​, которая умеет выводить​Создать​ данной темы у​ только с столбца​ .Left = Target.Left​ буду побывать адаптировать,​ все, если ячейка​ разположение постоянно меняется​ выпадающем списке ВЕРСИЯ​

​ в качестве источника​​ выбранному в первом​ «умная таблица», которая​: Конечно же надо​ листе 2 в​ диапазон ячеек, находящегося​ вручную изменять ссылку​высокая​ содержимое нужной по​. Введите имя (можно​ меня давно есть​ L. Столбец В​ + Target.Width .Clear​ сразу вопрос а​ пуста. Проверяет весь​ на экране.А когда​ 12.1 (файл Excel​ сразу два столбца.​ списке названию. Если​ легка «расширяется», меняется.​ попытаться сделать!!! Ща​ свободном столбце записал​ в другой книге​ на диапазон. Правда,​Возможность настройки шрифта, цвета​

​ счету ячейки из​​ любое, но обязательно​
​ нерешенный вопрос. А​ брал переменные только​ End With bu​ если одном листе​ столбец A на​ выбираешь ячейку со​ открытый код) [​
​Farvater​ «Деревья», то «граб»,​
​Теперь сделаем так, чтобы​ бы только разобраться…​ все города, присвоил​Если необходимо перенести диапазон​ в качестве источника​
​ и т.д.​ диапазона:​ без пробелов и​
​ именно: в приложенных​ в столбце M​ = False Me.TextBox2.Visible​

​ много таких выпадающих​​ листе Лист2. Так​

​ строкой 100+ то​​GIG_ant​: Здравствуйте.​ «дуб» и т.д.​ можно было вводить​ikki​ уникальное имя,в пункте​ с элементами выпадающего​

​ можно определить сразу​​нет​Этот способ частично напоминает​

​ начать с буквы!)​​ файлах реализован поиск​ и тд. В​
​ = True Me.ListBox2.Visible​ списков нужно вставить​ что, возможно, при​
​ и вовсе пропадает​]​
​Стоит задача сделать​

planetaexcel.ru

Выпадающий список с контекстным поиском (Формулы/Formulas)

​ Вводим в поле​​ новые значения прямо​
​: вот, нашлось: тынц​ ОБЛАСТЬ указал ЛИСТ1,​ списка в другую​ более широкий диапазон,​
​нет​ предыдущий. Основное отличие​ для выделенного диапазона​ с выпадающем списком.​

​ моей БОЛЬШОЙ таблице​​ = True Else​ в мою таблицу​
​ ооочень большом числе​
​ с экрана,видимо открывается​

excelworld.ru

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

Видео

​Uchimata​ таблицу в которой​ «Источник» функцию вида​ в ячейку с​

​не скачивал, не​ скопировал ДИАПОЗОН, сохранил,​ книгу (например, в​ например,​

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

​да​ в том, что​ (например​ Если копировать код​ хочу разместить около​​ Me.TextBox2.Visible = False​ ​ с переменными как​​ городов и формул​ вне его видимости.​​: Здравствуйте!В интренете нашел​​ будет функция поиска​ =ДВССЫЛ(E3). E3 –​ этим списком. И​ проверял, но, судя​ перешел на лист1,​ книгу Источник.xlsx), то​A1:A100​Количество отображаемых строк​ на лист добавляется​

С выпадающий список с поиском вȎxcel

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

  1. ​Товары​ из файлов-примеров возникает​ 15 выпадающих списка.Заранее​ Me.ListBox2.Visible = False​
  2. ​ указать источники в​ в столбце C​Вопрос:как закрепить ее​ очень здоровскую вещь​​ в выпадающем списке.​ ячейка с именем​ ​ данные автоматически добавлялись​ по описанию -​​ данные, проверка данных,​ нужно сделать следующее:​. Но, тогда выпадающий​​всегда 8​​ не элемент управления,​​). Нажмите​​ ошибка на отсутствие​​ благодарен. извините за​​ End If End​ прилагаемом файле это​ на листе Лист2​ местоположения так ,чтобы​ «Выпадающий список с​То есть имеется​​ первого диапазона.​​ в диапазон.​​ то, что Вам​​ список, и вставил​
  3. ​в книге Источник.xlsx создайте​ список может содержать​любое​ а элемент ActiveX​ОК​ Textbox1 и Listbox1.​​ настойчивость​ Sub Private Sub​​ я как понял​​ может тормозить.​​ она например окрывалась​​ поиском» ,но вот​​ пункт города в​Бывает, когда из раскрывающегося​​Сформируем именованный диапазон. Путь:​​ надо.​ диапозон).​​ необходимый перечень элементов;​​ пустые строки (если,​

С выпадающий список с поиском вȎxcel

​Быстрый поиск элемента по​​»Поле со списком»​​.​

​ В иных подобных​

С выпадающий список с поиском вȎxcel

​phelex​ TextBox2_Change() Dim X,​ UCase(Лист1.Cells(i, 12))​На листе Лист2​ все время по​ незадача.Он представлен как​ таблице, а на​ списка необходимо выбрать​ «Формулы» — «Диспетчер​boulingist​Проблема в том,​в книге Источник.xlsx диапазону​ например, часть элементов​ первым буквам​из раскрывающегося набора​Выделите ячейки (можно сразу​ темах ответ звучал,​: Друг очень крутое​

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

​ i, txt As​gling​ в ячейке B1​ центру вне зависимости​ надстройка.Тоесть для того​ другом листе перечислены​ сразу несколько элементов.​ имен» — «Создать».​

  1. ​: Да задумка именно​ что необходимый город​​ ячеек содержащему перечень​​ была удалена или​нет​ под кнопкой​​ несколько), в которых​​ что нужно их​​ решение. Как раз​ String, lt, s​: Да это ссылка​ число удовлетворяющих условию,​​ в каком месте​ чтобы заработал сначала​ все города. Нужно​​ Рассмотрим пути реализации​ ​ Вводим уникальное название​​ такая! скачивал, но​​ теперь найти сложно.​ элементов присвойте Имя,​ список только что​нет​Вставить (Insert)​ хотите получить выпадающий​
  2. ​ создать или скопировать​ искал.​ As String If​ на столбец где​ в столбце С​​ листа я нахожусь?​​ нужно загрузить книгу,​
    С выпадающий список с поиском вȎxcel
    ​ при вводе в​ задачи.​ диапазона – ОК.​ не разобрался как​
  3. ​Как сделать что​ например СписокВнеш;​ был создан). Чтобы​​да​​с вкладки​ список и выберите​
  • ​ в своем файле.​​А можно его​ Len(TextBox2.Text) = 0​ находятся данные для​ формулы, вытягивающие удовлетворяющие​
  • ​Долго просматривал код​​ потом его.Причем тот​ каждой ячейку под​Создаем стандартный список с​Создаем раскрывающийся список в​
  • ​ добавлять данные… Но​​ бы в этом​откройте книгу, в которой​ пустые строки исчезли​Необходимость использования дополнительной функции​Разработчик (Developer)​ в меню (на​ Но ведь Ваши​

​ на множественный выбор​​ Or bu Then​​ списка.​

​ условию значения. Если​ ,возможно вот здесь​ кто его сделал​ столбцом «города» раскрывать​​ помощью инструмента «Проверка​​ любой ячейке. Как​ спасибо.. Тема какраз​ списке появилась строка​ предполагается разместить ячейки​

С выпадающий список с поиском вȎxcel

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

​ необходимо сохранить файл.​ИНДЕКС​:​ вкладке)​ примеры работают без​ подточить? Типо:​​ Exit Sub txt​​Виктор C​ условие слабое, формул​​ нужно помимо данных​​ запоролил этот xla​​ список с городами,​​ данных». Добавляем в​

С выпадающий список с поиском вȎxcel

​ это сделать, уже​ та что мне​ поиска, при наборе​ с выпадающим списком;​Второй недостаток: диапазон источника​нет​Механизм добавления тот же​Данные — Проверка (Data​

​ них, либо они​Столбец 1 Столбец​ = TextBox2.Text lt​: хочется сделать красиво​ может не хватить​ функций добавить еще​ файл.Можно ли …​ созданный на другом​ исходный код листа​ известно. Источник –​ нужна!!!​ в которой напр.​выделите нужный диапазон ячеек,​ должен располагаться на​да​ — выбираем объект​ — Validation)​​ скрыты? И в​​ 2​​ = Len(TextBox2.Text) X​​ а VBA я​

С выпадающий список с поиском вȎxcel

​ — Вам решать:​ чтото,касающееся ее расположения?​ сделать этот макрос​ листе.​ готовый макрос. Как​​ имя диапазона: =деревья.​​Сейчас по колдовал​ : Е (выпадают​ вызовите инструмент Проверка​ том же листе,​

С выпадающий список с поиском вȎxcel

​нет​ из списка и​. Из выпадающего списка​

  • ​ таком случае как​​Выбор 1 Выбор​ = Лист1.Columns(13).SpecialCells(2).Value For​ не знаю думал​ сколько их там​Private Sub UserForm_Initialize()​ для определенной книги.Чтобы​Т.к. городов много,​ это делать, описано​
  • ​Снимаем галочки на вкладках​​ с это надстройкой…​ все города на​ данных, в поле​ что и выпадающий​
  • ​Возможность создания связанных выпадающих​​ рисуем его на​Тип данных (Allow)​
  • ​ их скопировать из​​ 1​ i = 1​ исправлю​ оставить.​
  • ​ Me.Move ActiveWindow.PointsToScreenPixelsX(ActiveCell.Left), ActiveWindow.PointsToScreenPixelsY(ActiveCell.Top),​​ я смог передавать​​ нужно в списке​​ выше. С его​ «Сообщение для ввода»,​

​ в принципе штука​ Е), ЕК (всегорода​ Источник укажите =ДВССЫЛ(«[Источник.xlsx]лист1!СписокВнеш»);​ список, т.к. для​ списков​ листе. А вот​выберите вариант​ файлов примеров?​Выбор 1 Выбор​ To Лист1.Cells(Rows.Count, 13).End(xlUp).Row​ComboBox1 на ComboBox2;​Переделал немного. Ссылка​ ActiveCell.Width * 64​

​ один этот файл​ сделать поиск по​ помощью справа от​​ «Сообщение об ошибке».​​ хорошая, но как​ на ЕК) и​При работе с перечнем​ правил Проверки данных нельзя​нет​ дальше начинаются серьезные​Список (List)​gling​​ 2​​ ‘If InStr(1, UCase(Лист1.Cells(i,​TextBox1 на TextBox2;​ на столбец A​ 48Очень большая​ и у получателя​

С выпадающий список с поиском вȎxcel

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

​ первым буквам, или​​ выпадающего списка будут​ ​ Если этого не​​ оказалось не совсем​ ​ так далее.​​ элементов, расположенным в​ ​ использовать ссылки на​​да​
​ отличия от предыдущего​ ​и введите в​ ​: Цитатаgling написал:​ ​Выбор 2 Выбор​
​ 13)), UCase(TextBox2.Value)) >​Range(«A2:A3000»)) на Range(«B2:B3000»));​ ​ листа Лист2 осталась​ ​ просьба помочь…​ ​ он тоже работал.​
​ по похожим значениям.​ ​ добавляться выбранные значения.Private​ ​ сделать, Excel не​
​ то , что​Эт вообще возможно?​ ​ другой книге, файл​ ​ другие листы или​ ​нет​
​ способа.​​ строчку​ ​Писал не я,​ ​ 3​ ​ 0 Then s​
​поменял столбец 12​ только в динамическом​ ​Всегда,как чтото спрашиваю,тут​ ​Если у кого​ ​ Третий день ищу,​

planetaexcel.ru

​ Sub Worksheet_Change(ByVal Target​

Содержание

  • 1 Выпадающий список с контекстным поиском
  • 2 Файл примера
      • 2.0.1 Скачать
  • 3 Пошаговая инструкция
    • 3.1 Предварительные замечания
    • 3.2 Шаг 1. Готовим таблицу для списка
    • 3.3 Шаг 2. Формулы для столбца Статус
      • 3.3.1 =НЕ( ЕОШИБКА( ПОИСК( $B$2; $E2) ) )
        • 3.3.1.1 =NOT( ISERROR( SEARCH( $B$2; $E2) ) )
      • 3.3.2 =НЕ( ЕОШИБКА( ПОИСК( $B$2; ) ) )
        • 3.3.2.1 =NOT( ISERROR( SEARCH( $B$2; ) ) )
    • 3.4 Шаг 3. Формула для столбца Индекс
      • 3.4.1 =ЕСЛИ( $F2; СЧЁТЕСЛИ( $F$2:$F2; ИСТИНА ); «»)
        • 3.4.1.1 =IF( $F2; COUNTIF( $F$2:$F2; TRUE ); «»)
      • 3.4.2 =ЕСЛИ( ; СЧЁТЕСЛИ( $F$2:; ИСТИНА ); «»)
        • 3.4.2.1 =IF( ; COUNTIF( $F$2:; TRUE ); «»)
    • 3.5 Шаг 4. Формула для столбца Фильтр
      • 3.5.1 =ЕСЛИОШИБКА( ИНДЕКС( стлГород; ПОИСКПОЗ( ЧСТРОК($G$2:$G2); стлИндекс; 0) ); «»)
        • 3.5.1.1 =IFERROR( INDEX( стлГород; MATCH( ROWS($G$2:$G2); стлИндекс; 0) ); «» )
      • 3.5.2 =ЕСЛИОШИБКА( ИНДЕКС( ; ПОИСКПОЗ( ЧСТРОК($G$2:); ; 0) ); «»)
        • 3.5.2.1 =IFERROR( INDEX( ; MATCH( ROWS($G$2:); ; 0) ); «» )
    • 3.6 Шаг 5. Создание именованных диапазонов
      • 3.6.1 =Range!$E$2:ИНДЕКС( Range!$E:$E; СЧЁТЗ(Range!$E:$E) )
        • 3.6.1.1 =Range!$E$2:INDEX( Range!$E:$E; COUNTA(Range!$E:$E) )
      • 3.6.2 =Range!$G$2:ИНДЕКС( Range!$G:$G; СЧЁТЗ(Range!$G:$G) )
        • 3.6.2.1 =Range!$G$2:INDEX( Range!$G:$G; COUNTA(Range!$G:$G) )
      • 3.6.3 =Range!$H$2:ИНДЕКС( Range!$H:$H; СЧЁТЗ(Range!$H:$H) )
        • 3.6.3.1 =Range!$H$2:INDEX( Range!$H:$H; COUNTA(Range!$H:$H) )
      • 3.6.4 =Range!$H$2:ИНДЕКС( стлФильтр; МАКС(стлИндекс) )
        • 3.6.4.1 =Range!$H$2:INDEX( стлФильтр; MAX(стлИндекс) )
      • 3.6.5 =Table!$H$2:ИНДЕКС( tblData; МАКС(tblData) )
        • 3.6.5.1 =Table!$H$2:INDEX( tblData; MAX(tblData) )
      • 3.6.6 =DDL_Table
    • 3.7 Шаг 6. Вставляем Combo box на лист
    • 3.8 Шаг 7. Модификация события Change для элементов Поле со списком
      • 3.8.1 Вот и всё!
    • 3.9 Читайте также:
      • 3.9.1 Создание выпадающего списка в ячейке
      • 3.9.2 Каскадные выпадающие списки
      • 3.9.3 Универсальные динамические каскадные выпадающие списки без VBA!
      • 3.9.4 Каскадные комбинированные списки
      • 3.9.5 Динамические каскадные списки на основе сводных таблиц
  • 4 Немного кода…
  • 5 Привет разработчикам
  • 6 Идея!
  • 7 Пример создания зависимого выпадающего списка в ячейке Excel
  • 8 Список категорий и подкатегорий в зависимом выпадающем списке Excel
    • 8.1 Зависимый выпадающий список подкатегорий
    • 8.2 Рабочая исходная таблица Excel
  • 9 1. Имена диапазонов ячеек
  • 10 2. Создание раскрывающегося списка для категории
    • 10.1 3. Создание зависимого выпадающего списка для подкатегории
  • 11 Проверка вводимых значений для подкатегории в зависимом выпадающем списке
  • 12 Формирование выпадающего списка
    • 12.1 Как добавлять значения в список

Я собираюсь вам рассказать о фантастически полезном и эффектном приёме. Это одна из самых интересных вещей, которую мне доводилось видеть в Excel. Кроме того, она достаточно легко реализуется. Если вы разберётесь, как она работает, то вы сразу узнаете об Excel необычно много. Я постараюсь рассказать всё максимально подробно, последовательно и внятно.

Выпадающий список с контекстным поиском

Итак, речь пойдёт о выпадающем списке (так называемый combo box), в который встроена возможность динамического поиска по подстроке, которую пользователь вводит с клавиатуры. Посмотрите пример, в котором мы имеем топ 300 крупнейших городов России. На анимированной иллюстрации видно, как мы динамически сужаем список выбора, вводя подстроку «кр» или «ниж», экономя огромное количество времени. Более того, список меняется после ввода каждого нового символа! Выглядит чрезвычайно привлекательно и профессионально, не так ли? Давайте разбираться, как это устроено.

Файл примера

Скачать

Пошаговая инструкция

Предварительные замечания

В файле примера выпадающий список с поиском реализован сразу в двух вариантах: для обычного диапазона (лист Range) и для умной таблицы (лист Table). Мы будим эти варианты обсуждать одновременно, отмечая их различия.

Шаг 1. Готовим таблицу для списка

Подготовьте таблицу с четырьмя колонками: Город (или то, что вам нужно), Статус, Индекс, Фильтр. Заполните столбец Город значениями. В остальных трёх колонках будут формулы, которые мы обсудим ниже. Я всем рекомендую использовать умную таблицу, так как это значительно проще.

Шаг 2. Формулы для столбца Статус

На примере ячейки F2 рассмотрим формулу, аналогичную для всего столбца Статус (столбец F). Из F2 формулу можно протягивать вниз до конца, а в случае умной таблицы Excel это сделает за вас. Это также относится ко всем формулам, которые мы будем обсуждать в этой статье.

$B$2 — ячейка, с которой будет связан выпадающий список (добавляется на шаге 6). Что значит связано? Всё, что вы введёте в выпадающий список, тут же отразится в ячейке B2.

Формула ПОИСК вернёт ошибку, если содержимое B2 не найдено в $E2. ЕОШИБКА перехватит ошибку и вернёт ИСТИНА, если действительно была ошибка, и — ЛОЖЬ, если строка таки была найдена. Функция НЕ делает из истины ложь и наоборот (инверсирует результат). Таким образом, мы получим в этом столбце ИСТИНА, если подстрока найдена в текущем городе, и наоборот. Обратите внимание, что пустая подстрока содержится в любой строке, поэтому все ячейки столбца Статус имеют значения ИСТИНА, когда мы не ввели ещё ничего в B2.

Обычный диапазон Умная таблица

=НЕ( ЕОШИБКА( ПОИСК( $B$2; $E2) ) )

или

=NOT( ISERROR( SEARCH( $B$2; $E2) ) )

=НЕ( ЕОШИБКА( ПОИСК( $B$2; ) ) )

или

=NOT( ISERROR( SEARCH( $B$2; ) ) )

— на языке структурных формул умных таблиц это ссылка на ячейку столбца Город в той же строке, в которой находится сама формула. Поскольку ссылка идёт внутри таблицы, то имя самой таблицы в формуле можно не использовать. В остальном всё — тоже самое.

Шаг 3. Формула для столбца Индекс

Если B2 содержит подстроку поиска, то в столбце Статус не все ячейки примут значение ИСТИНА. Статус ИСТИНА будет только там, в чьи названия городов входит соответствующая подстрока. А в столбце Индекс мы рассчитываем номер по порядку для всех строк, которые содержат искомую подстроку. Например, на рисунке ниже B2 содержит «ни», что заставляет столбец Статус быть истинным у строк с городами Нижний Новгород, Калининград, Магнитогорск и т.д., а в столбце Индекс мы начинаем считать факты срабатываний в F: Нижний Новгород — первое срабатывание, Калининград — второе и так далее.

как сделать поиск по выпадающему списку в excel

Функция ЕСЛИ отсекает все значения в F, которые не равны ИСТИНА. Функция СЧЁТЕСЛИ подсчитывает количество значений ИСТИНА в F.

Обычный диапазон Умная таблица

=ЕСЛИ( $F2; СЧЁТЕСЛИ( $F$2:$F2; ИСТИНА ); «»)

или

=IF( $F2; COUNTIF( $F$2:$F2; TRUE ); «»)

=ЕСЛИ( ; СЧЁТЕСЛИ( $F$2:; ИСТИНА ); «»)

или

=IF( ; COUNTIF( $F$2:; TRUE ); «»)

Обратите внимание, что диапазон условия в СЧЁТЕСЛИ введен скользящий — вторая координата не закреплена — и во время протягивания она растёт пропорционально таблице. За счёт этого трюка мы получаем механизм подсчёта значения ИСТИНА. Например, 6-я строка будет подсчитывать ИСТИНУ по диапазону $F$2:$F6 (там одно значение — от Нижнего Новгорода), а 41-я строка будет подсчитывать ИСТИНУ уже по диапазону $F$2:$F41 (а там уже 2 значения — от Нижнего Новгорода и от Калининграда). Вот суть механизма. Это полезный приём, который стоит запомнить.

Шаг 4. Формула для столбца Фильтр

Теперь наша задача, опираясь на столбец Индекс, сформировать в столбце H отфильтрованный список городов, который необходимо показывать в выпадающем списке.

Обычный диапазон Умная таблица

=ЕСЛИОШИБКА( ИНДЕКС( стлГород; ПОИСКПОЗ( ЧСТРОК($G$2:$G2); стлИндекс; 0) ); «»)

или

=IFERROR( INDEX( стлГород; MATCH( ROWS($G$2:$G2); стлИндекс; 0) ); «» )

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

=ЕСЛИОШИБКА( ИНДЕКС( ; ПОИСКПОЗ( ЧСТРОК($G$2:); ; 0) ); «»)

или

=IFERROR( INDEX( ; MATCH( ROWS($G$2:); ; 0) ); «» )

Не путайте: — ссылка на весь столбец, а — ссылка на ячейку из этого столбца в текущей строке. Никакие дополнительные именованные диапазоны нам создавать нет никакой необходимости, так как мы пользуемся встроенным в умные таблицы сервисом при ссылке на столбцы.

Формула ЧСТРОК($G$2:$G2) используется для генерации последовательных номеров от 1 (для второй строки) до N (в строке N+1), равному количеству найденных подстрок. Просто генерируется диапазон соответствующего размера, а формула ЧСТРОК возвращает его высоту в строках.

Формула ПОИСКПОЗ ищет номер реальной строки, содержащий соответствующий индекс. Например, в столбце Фильтр мы видим Магнитогорск на третьей позиции, но в реальности он взят из E45, так как в G45 стоит цифра 3, которую мы и нашли через ПОИСКПОЗ. То есть ПОИСКПОЗ сказал нам, что Магнитогорск находится в 45-й строке, а извлекли мы его оттуда уже при помощи формулы ИНДЕКС.

Если же при извлечении возникает ошибка (текущая строка находится ниже строки N+1), то формула возвращает пустую строку. За это отвечает ЕСЛИОШИБКА.

Шаг 5. Создание именованных диапазонов

Обычный диапазон Умная таблица

Именованный диапазон стлГород

=Range!$E$2:ИНДЕКС( Range!$E:$E; СЧЁТЗ(Range!$E:$E) )

или

=Range!$E$2:INDEX( Range!$E:$E; COUNTA(Range!$E:$E) )

Именованный диапазон стлИндекс

=Range!$G$2:ИНДЕКС( Range!$G:$G; СЧЁТЗ(Range!$G:$G) )

или

=Range!$G$2:INDEX( Range!$G:$G; COUNTA(Range!$G:$G) )

Именованный диапазон стлФильтр

=Range!$H$2:ИНДЕКС( Range!$H:$H; СЧЁТЗ(Range!$H:$H) )

или

=Range!$H$2:INDEX( Range!$H:$H; COUNTA(Range!$H:$H) )

Именованный диапазон DDL_Range

=Range!$H$2:ИНДЕКС( стлФильтр; МАКС(стлИндекс) )

или

=Range!$H$2:INDEX( стлФильтр; MAX(стлИндекс) )

Именованный диапазон DDL_Table

=Table!$H$2:ИНДЕКС( tblData; МАКС(tblData) )

или

=Table!$H$2:INDEX( tblData; MAX(tblData) )

tblData — имя умной таблицы

Именованный диапазон DDL_Fake

=DDL_Table

Именованный диапазон DDL_Fake, как видите, напрямую ссылается на DDL_Table и нужен для того, чтобы обмануть элемент управления ComboBox21, так как он не умеет работать с ИД, ссылающимися на умную таблицу.

DDL_Range и DDL_Table это диапазоны, которые формируются на базе значений столбца Фильтр без пустых строк. Эти ИД указываются в свойствах ListFillRange выпадающих списков (DDL_Table — через DDL_Fake).

как сделать поиск по выпадающему списку в excel

Шаг 6. Вставляем Combo box на лист

На ленте Разработчик в группе Элементы управления через кнопку Вставить выберите элемент управления ActiveX Поле со списком и вставьте его на лист.

как сделать поиск по выпадающему списку в excel

Далее:

  • Нажмите кнопку Режим конструктора (предварительно убедитесь, что вставленный элемент управления активен)

  • Нажмите кнопку Свойства на ленте

  • Отредактируйте свойства в соответствии с рисунком:

    • Поле AutoWordSelect должно быть равно False
    • Поле LinkedCell сделайте равным B2
    • Поле ListFillRange должно быть либо DDL_Range для обычного диапазона (лист Range), либо DDL_Fake для умной таблицы (лист Table).
    • Поле MatchEntry = 2 — fmMatchEntryNone

как сделать поиск по выпадающему списку в excel

Шаг 7. Модификация события Change для элементов Поле со списком

Ну и изюминка нашего приёма, то, что заставляет Поле со списком показывать нам обновленный список выбора после каждого изменения строки ввода, — событие Change этого элемента управления, которое переприсваивает свойство ListFillRange и вызывает событие раскрытия списка DropDown.

Вот и всё!

P.S. К сожалению, не я придумал такую крутую штуку. Это сделал индийский товарищ Sumit Bansal, решение которого я лишь немного оптимизировал (исправил VBA событие — у него оно почему-то было привязано к GotFocus, что всё портило, и сократил формулы).

Читайте также:

  • Создание выпадающего списка в ячейке

  • Каскадные выпадающие списки

  • Универсальные динамические каскадные выпадающие списки без VBA!

  • Каскадные комбинированные списки

  • Динамические каскадные списки на основе сводных таблиц

Привет!

В Одессе сильная жара, и меня ждет море. Море работы. Я разработал такой вот выпадающий список с поиском — как в Гугле — для Экселя.

как сделать поиск по выпадающему списку в excel

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

Данные → Проверка данных… Выбор значений из списка.

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

как сделать поиск по выпадающему списку в excel

Чего склонен ожидать пользователь от такого списка?

  1. При вводе любого символа с клавиатуры список сокращается до тех значений, которые отвечают введенному критерию-символу. Это сделать нельзя.
  2. Ну хотя бы при вводе первого символа, чтобы список прокручивался до слов, начинающихся с той буквы, которую ты ввел. Нет, так сделать тоже нельзя.

Предлагаю решение, которое поможет тебе справляться с большими списками. Решение использует VBA с использованием пользовательской формы. Далее я пошагово расскажу, как у себя настроить то же. Но сперва предлагаю

скачать пример с готовым фильтром

, на базе которого ты можешь настроить свой шаблон.

Немного кода…

Работаем в редакторе VBA. Если ты раньше там не бывал, не бойся. В этом нет ничего страшного!

Нажми + для открытия редактора кода. Интерфейс его весьма приятный, он не менялся, наверное, уже лет 20. Слева нажми правой кнопкой мыши по элементам текущей книги и нажми Insert > Module.

как сделать поиск по выпадающему списку в excel

Итак, в обычный модуль добавь следующий код:

 Option Explicit Const minW = 170 Const minH = 15 Public NamedRange       As String Public LinkedCell       As Range Public List             As Range Public L                As Long Public T                As Long Public W                As Long Public H                As Long Public CodeChange       As Boolean   Private Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long   Private Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long) As Long   Private Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long   Private Declare Function DrawMenuBar Lib "user32" ( _ ByVal hwnd As Long) As Long  Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long Private Const HWND_DESKTOP As Long = 0 Private Const LOGPIXELSY As Long = 90 Private Const LOGPIXELSX As Long = 88  Const TWIPSPERINCH = 1440  Private Declare Function SystemParametersInfo Lib "user32" _       Alias "SystemParametersInfoA" _     (ByVal uAction As Long, _       ByVal uParam As Long, _       lpvParam As Any, _       ByVal fuWinIni As Long) As Long  Sub ShowForm()     If UserForm1.Caption = "UserForm1" Then _     UserForm1.Show ' show the form End Sub  Sub ButtonLaunch() ' Change Range(...) to yours Dim Target      As Range On Error Resume Next Set Target = ActiveCell If Intersect(Target, Range("B4:B500")) _     Is Nothing Or Target.Cells.Count > 1 Then     Exit Sub End If SetList Call DetectDimentions(Target) Call SetLinkedCell(Target) ShowForm End Sub  Sub DetectDimentions(Ran As Range) Dim S       As Shape Dim C       As Range Dim TwX     As Long Dim TwY     As Long Dim CorrX   As Long Dim CorrY   As Long Dim ScrRow  As Long Dim ScrCol  As Long Dim Cls     As Range Dim Ros     As Range Dim Zoom    As Integer  TwX = TwipsPerPixelX TwY = TwipsPerPixelY Set C = Cells(1, 1) Set S = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 0, 1, 1) S.Top = C.Top S.Left = C.Left  ' find correction Zoom = ActiveWindow.Zoom ActiveWindow.Zoom = 100 ScrRow = ActiveWindow.ScrollRow ScrCol = ActiveWindow.ScrollColumn If ActiveWindow.ScrollRow > 1 Then Set Cls = Range(Cells(1, 1), Cells(ScrRow - 1, 1)) CorrY = Cls.Height * 20 / TwX End If If ActiveWindow.ScrollColumn > 1 Then Set Ros = Range(Cells(1, 1), Cells(1, ScrCol - 1)) CorrX = Ros.Width * 20 / TwX End If  With ActiveWindow     L = .PointsToScreenPixelsX(S.Left) + CorrX     T = .PointsToScreenPixelsY(S.Top) + CorrY End With ActiveWindow.Zoom = Zoom L = L * TwX / 20 T = T * TwY / 20  With Ran     W = .Width     If W < minW Then W = minW     H = .Height     If H < minH Then H = minH End With  S.Delete  End Sub  Sub SetLinkedCell(Target As Range)     Set LinkedCell = Target End Sub  Sub SetList() NamedRange = "Regions" On Error Resume Next     Set List = Range(NamedRange) If Err.Number  0 Then     MsgBox "Диапазона  не существует =("     End End If End Sub  Public Function InList(Find As String, List As Range)     InList = Application.Match(Find, List, 0)     If IsError(InList) Then InList = False End Function   Sub PopulateList(CB As MSForms.ListBox, List As Range, CBval As String)     Dim Cel     As Range     CB.Clear     If CBval = "" Or InList(CBval, List) Then         For Each Cel In List             CB.AddItem Cel         Next Cel     Else         CBval = UCase(CBval)         For Each Cel In List             If InStr(1, UCase(Cel), CBval) Then _                 CB.AddItem Cel         Next Cel     End If End Sub  Sub RemoveCaption(objForm As Object)           Dim lStyle          As Long     Dim hMenu           As Long     Dim mhWndForm       As Long           If Val(Application.Version) < 9 Then         mhWndForm = FindWindow("ThunderXFrame", objForm.Caption) 'XL97     Else         mhWndForm = FindWindow("ThunderDFrame", objForm.Caption) 'XL2000+     End If     lStyle = GetWindowLong(mhWndForm, -16)     lStyle = lStyle And Not &HC00000     SetWindowLong mhWndForm, -16, lStyle     DrawMenuBar mhWndForm       End Sub  Public Function TwipsPerPixelX()   Dim lngDC As Long     lngDC = GetDC(HWND_DESKTOP)   TwipsPerPixelX = TWIPSPERINCH / GetDeviceCaps(lngDC, LOGPIXELSX)   ReleaseDC HWND_DESKTOP, lngDC End Function   Public Function TwipsPerPixelY()   Dim lngDC As Long     lngDC = GetDC(HWND_DESKTOP)   TwipsPerPixelY = TWIPSPERINCH / GetDeviceCaps(lngDC, LOGPIXELSY)   ReleaseDC HWND_DESKTOP, lngDC End Function 

В этом коде найди строку NamedRange = «Regions» и слово Regions замени на свой диапазон. Это может быть адрес диапазона, например «Лист1!A1:A200», это может быть имя диапазона, как в моем случае.

Так же в строке

If Intersect(Target, Range(«B4:B500»))

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

B4:B500

на адрес своего диапазона. Этот адрес может не содержать имени листа, т.к. всегда используется текущий лист.

Дальше нужно вставить форму с двумя элементами управления: TestBox и ListBox.

Там же в редакторе кода вставляешь форму: Insert > UserForm. И на нее простыми кликами мыши переносишь TestBox и ListBox. Ты их можешь разместить как угодно. При запуске формы мы их разместим правильно.

как сделать поиск по выпадающему списку в excel

Теперь пора вставлять код формы. Выдели саму форму и нажми . Это перенесет тебя в окно с кодом самой формы. В это окно вставь код:

 Const ListBoxH = 100 Option Explicit Private Sub ListBox1_Change() If ListBox1.ListIndex > -1 Then     If ListBox1.Value  TextBox1.Value Then         CodeChange = True         TextBox1.Value = ListBox1.Value     End If End If End Sub Sub EndForm()     LinkedCell = ListBox1.Value     Unload Me End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)     EndForm End Sub  Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Select Case KeyCode Case 13     EndForm Case 38     If ListBox1.ListIndex = 0 Then TextBox1.SetFocus End Select End Sub  Private Sub TextBox1_Change() If CodeChange Then     CodeChange = False Else     LinkedCell.Value = TextBox1.Value     Call PopulateList(UserForm1.ListBox1, List, TextBox1.Value) End If End Sub  Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Select Case KeyCode Case 18     ListBox1.Value = "" Case 40     If ListBox1.ListCount > 0 Then         ListBox1.ListIndex = 0         ListBox1.SetFocus     End If End Select End Sub  Private Sub UserForm_Terminate()     If InList(LinkedCell.Value, List) = False Then         LinkedCell.Value = ""     End If End Sub Private Sub UserForm_Initialize()     Call RemoveCaption(Me) End Sub Private Sub UserForm_Activate()     With UserForm1         .Top = T         .Left = L         .Width = W + 4         .Height = H + ListBoxH - 4     End With     With ListBox1         .Top = H         .Left = 0         .Width = W         .Height = ListBoxH     End With     With TextBox1         .Top = 0         .Left = 0         .Width = W         .Height = H + 5         .Value = LinkedCell.Value     End With     If LinkedCell.Value = "" Then _     Call PopulateList(UserForm1.ListBox1, List, TextBox1.Value) End Sub    

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

ButtonLaunch.

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

И еще ты можешь заставить код срабатывать автоматически. Для этого в код целевого листа вставь следующее:

 Option Explicit  Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' Change Range(...) to yours If Target.Columns.Count > 1 Then Exit Sub If Target.Rows.Count > 1 Then Exit Sub If Intersect(Target, Range("B4:B500")) Is Nothing Then     Exit Sub End If SetList Call DetectDimentions(Target) Call SetLinkedCell(Target) ShowForm End Sub  

В этом последнем коде так же замени диапазон. В строке

If Intersect(Target, Range(«B4:B500»))

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

B4:B500

на адрес своего диапазона.

***

Сложно мне было достичь такого результата… Что я только не перепробовал, пока не пришел к такому решению. И оно, разумеется, не идеально…

Привет разработчикам

В Экселе, оказывается, не все так просто, как на самом деле. При разработке данного проекта я пробовал использовать следующие средства:

Элементы ActiveX.  Результат: работают они красивее, чем формы, к тому же они самостоятельны (не привязаны к оболочке) и являются  частью рабочего пространства т.е. ячеек Экселя. Поэтому связанные списки у меня появлялись прямо в ячейках. Но при работе с ActiveX, оказалось, что они сплошь глючные, иногда неадекватно показывают событие выпадения самого списка. И когда, преодолев все сложности, я дописал код, оказалось, что он работает нестабильно. На более слабой машине, чем моя, Эксель пока последней 2013 версии вылетал каждый раз при попытке создания списка.

как сделать поиск по выпадающему списку в excel

Элементы управления формы.

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

Выпадающий список в форме. Это уже ближе. С формой у меня есть отдельная боль — ее очень нелегко разместить в нужном месте экрана, на что ушло процентов 80 всего кода и столько же усилий. Но главное, что выпадающий список в стандартной форме Экселя тоже работал глючно. А именно, при попытке заставить его выпадать, он часто выдавал непредсказуемый результат на экран.

Сочетание элементов управления в форме. Наконец, я пришел к двум связанным элементам формы, которые симулируют один выпадающий список, а именно это простое текстовое поле (TestBox) и простой список(ListBox). Именно этот вариант привел меня к решению.

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

Идея!

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

как сделать поиск по выпадающему списку в excel

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

  1. Во-первых, качай пример себе и тестируй, адаптируй, развивай.
  2. Второе. Как его адаптировать. В коде листа есть обработчик событий, и в нем нужно заменить во второй строке Const DropDownRange = «B4:B500» на свой диапазон. С этим проблем не должно возникнуть. Дальше в модуле есть код, который обрабатывает большинство вещей. В нем ты тоже замени кое-что, а именно в строке Public Const NamedRange = «Regions» поменяй «Regions» на полный адрес диапазона со значениями для проверки. Тут удобнее использовать именованный диапазон, как в моем примере, но можно и прописать полный адрес, например Лист1!А1:А25
  3. Третье. Данным списком удобно пользоваться. Он работает шустро. Он отвечает на некоторые события: после редактирования текста меняется список, это само собой. Но еще ты можешь после ввода чего-нибудь нажать на стрелки Вниз — Вверх, при этом выделятся значения внутри списка, и потом нажать или ввести выбранное значение. Это, по-моему, совпадает с ожидаемым поведением элементов управления. Тут пока есть небольшая недоработка, которую ты легко заметишь, протестировав пример. А именно если в текстовое поле ничего не введено, то оно не реагирует на нажатие стрелок. Но с этим можно жить, а к тому же, думаю, пытливый ум найдет решение.
  4. Данный список не проверяет жестко введенный текст в ячейку, но с этим можно легко справиться, например, дополнительно сделав проверку данных по диапазону.

Это решение, по-моему, максимально отвечает поставленной задаче. Тут есть еще простор для улучшений, но начало задано. Смысл работы основывается на нескольких идеях:

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

Идея вторая. Использовать элементы ActiveX и элементы формы Ввиду множества проделанных неудачных опытов, я пришел к выводу, что напрямую добиться результата нельзя. Но можно отдельно использовать элемент со списком ListBox, и элемент поле TextBox, и заставить из совместно работать как ComboBox — выпадающий список. Повторюсь, что напрямую это сделать я не смог — уж очень много глюков обнаружилось. И вот я в решении соединил 2 элемента управления, причем один из них — ActiveX (поле), а второй — элемент формы (список). Это дало более стабильный результат, но при этом изящный и более легковесный, чем решение с пользовательскими формами. К тому же мне повезло найти пример с обработкой нажатия пользователем кнопок (KeyCode) при изменении Поля TextBox. Это дало возможность сделать список более дружелюбным к действиям пользователя.

Идея третья. Что еще можно сделать Еще можно сделать так, чтобы пользователь смог вручную отключать опцию выпадения списка. Дело в том, что это может быть слишком навязчиво и неудобно при форматировании таблицы в целом. Тут оставляю пробел и специально не дорабатываю код: это довольно просто сделать и способов множество, так что оставляю эту работу за тобой.

И еще, разумеется, можно повысить дружелюбность списков, и добавить жесткую проверку данных, которая не даст ошибиться при вводе. Но это потом.

***

Скоро будут выходные, и я хочу все-таки пойти на море. Поэтому закругляюсь.

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

Пример использования зависимого выпадающего списка для создания удобной формы заполнения документов, с помощью которых продавцы заказывали товары. Из всего ассортимента они должны были выбрать те продукты, которые они собирались продать.

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

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

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

Так, например, если мы выберем категорию Развлечения, то в списке подкатегорий должно быть: Кинотеатр, Театр, Бассейн. Очень быстрое решение, если в своем домашнем бюджете вы хотите проанализировать более подробную информацию.

Список категорий и подкатегорий в зависимом выпадающем списке Excel

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

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

Зависимый выпадающий список подкатегорий

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

Рабочая исходная таблица Excel

В эту таблицу необходимо ввести категорию и рядом с ней ее подкатегории. Имя категории должно повторяться столько раз, сколько есть подкатегорий. Очень важно, чтобы данные были отсортированы по столбцу Категория. Это будет чрезвычайно важно, когда позже будем писать формулу.

Можно было бы также использовать таблицы с первого изображения. Разумеется, формулы были бы разными. Однажды даже я нашел в сети такое решение, но оно мне не понравилось, потому что там была фиксированная длина списка: а значит, иногда список содержал пустые поля, а иногда и не отображал все элементы. Конечно, я могу избежать этого ограничения, но признаюсь, что мне больше нравится мое решение, поэтому к тому решению я больше не возвращался.

Ну хорошо. Теперь, по очереди я опишу шаги создания зависимого выпадающего списка.

1. Имена диапазонов ячеек

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

Присвоим имена двум диапазонам. Список всех категорий и рабочий список категорий. Это будут диапазоны A3:A5 (список категорий в зеленой таблице на первом изображении) и G3:G15 (список повторяющихся категорий в фиолетовой рабочей таблице).

Для того чтобы назвать список категорий:

  1. Выберите диапазон A3:A5.
  2. В поле имени (поле слева от строки формулы) введите название «Категория».
  3. Подтвердите с помощью клавиши Enter.

Такое же действие совершите для диапазона рабочего списка категорий G3:G15, который вы можете вызвать «Рабочий_Список». Этот диапазон мы будем использовать в формуле.

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

Это будет просто:

  1. Выберите ячейку, в которую вы хотите поместить список. В моем случае это A12.
  2. В меню «ДАННЫЕ» выберите инструмент «Проверка данных». Появится окно «Проверка вводимых значений».
  3. В качестве типа данных выберите «Список».
  4. В качестве источника введите: =Категория (рисунок ниже).
  5. Подтвердите с помощью OK.

Проверка вводимых значений – Категория.

Результат следующий:

Раскрывающийся список для категории.

3. Создание зависимого выпадающего списка для подкатегории

Сейчас будет весело. Создавать списки мы умеем — только что это сделали для категории. Только единственный вопрос: «Как сказать Excelю выбрать только те значения, которые предназначены для конкретной категории?» Как вы, наверное, догадываетесь, я буду использовать здесь рабочую таблицу и, конечно же, формулы.

Начнем с того, что мы уже умеем, то есть с создания раскрывающегося списка в ячейке B12. Поэтому выберите эту ячейку и нажмите «Данные» / «Проверка данных», а в качестве типа данных — «Список».

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

Вид окна «Проверка вводимых значений»:

Проверка вводимых значений для подкатегории в зависимом выпадающем списке

Как видите, весь трюк зависимого списка состоит в использовании функции СМЕЩ. Ну хорошо, почти весь. Помогают ей функции ПОИСКПОЗ и СЧЕТЕСЛИ. Функция СМЕЩ позволяет динамически определять диапазоны. Вначале мы определяем ячейку, от которой должен начинаться сдвиг диапазона, а в последующих аргументах определяем его размеры.

В нашем примере диапазон будет перемещаться по столбцу Подкатегория в рабочей таблице (G2:H15). Перемещение начнем от ячейки H2, которая также является первым аргументом нашей функции. В формуле ячейку H2 записали как абсолютную ссылку, потому что предполагаю, что мы будем использовать раскрывающийся список во многих ячейках.

Поскольку рабочая таблица отсортирована по Категории, то диапазон, который должен быть источником для раскрывающегося списка, будет начинаться там, где впервые встречается выбранная категория. Например, для категории Питание мы хотим отобразить диапазон H6:H11, для Транспорта — диапазон H12: H15 и т. д. Обратите внимание, что все время мы перемещаемся по столбцу H, а единственное, что изменяется, это начало диапазона и его высота (то есть количество элементов в списке).

Начало диапазона будет перемещено относительно ячейки H2 на такое количество ячеек вниз (по числу), сколько составляет номер позиции первой встречающейся категории в столбце Категория. Проще будет понять на примере: диапазон для категории Питание перемещен на 4 ячейки вниз относительно ячейки H2 (начинается с 4 ячейки от H2). В 4-ой ячейке столбца Подкатегория (не включая заголовок, так как речь идет о диапазоне с именем Рабочий_Список), есть слово Питание (его первое появление). Мы используем этот факт собственно для определения начала диапазона. Послужит нам для этого функция ПОИСКПОЗ (введенная в качестве второго аргумента функции СМЕЩ):

Высоту диапазона определяет функция СЧЕТЕСЛИ. Она считает все встречающиеся повторения в категории, то есть слово Питание. Сколько раз встречается это слово, сколько и будет позиций в нашем диапазоне. Количество позиций в диапазоне — это его высота. Вот функция:

Конечно же, обе функции уже включены в функцию СМЕЩ, которая описана выше. Кроме того, обратите внимание, что как в функции ПОИСКПОЗ, так и в СЧЕТЕСЛИ, есть ссылка на диапазон названный Рабочий_Список. Как я уже упоминал ранее, не обязательно использовать имена диапазонов, можно просто ввести $H3: $H15. Однако использование имен диапазонов в формуле делает ее проще и легко читаемой.

Вот и все:

Скачать пример зависимого выпадающего списка в Excel

Одна формула, ну не такая уж и простая, но облегчающая работу и защищает от ошибок при вводе данных!

Читайте также: Связанные выпадающие списки и формула массива в Excel

Два варианта использования этого трюка я уже представил. Интересно, как вы его будете использовать?

Выпадающие списки в Microsoft Excel незаменимы при создании объемных таблиц, работе с базами данных. В чем же конкретно заключается удобство этого инструмента?
• Если при заполнении таблицы некоторые данные периодически повторяются, нет необходимости каждый раз вбивать вручную постоянное значение — например, наименование товара, месяц, ФИО сотрудника. Достаточно один раз закрепить повторяющийся параметр в списке.
• Ячейки списка защищены от введения посторонних значений, что снижает вероятность допустить ошибку в работе.
• Таблица, оформленная таким образом, выглядит аккуратно.
В статье я расскажу, как в Экселе сделать выпадающий список в ячейке и как с ним работать.

Формирование выпадающего списка

Один из распространенных примеров использования выпадающих списков – интернет-магазины, в которых вся продукция распределена по категориям – такая структура облегчает пользователям поиск по сайту.
Рассмотрим наглядно:

Все товары, перечисленные в таблице, нужно отнести к категории «Одежда». Чтобы создать выпадающий список для этого перечня, потребуется выполнить следующие действия:
• Выделить любую ячейку, в которой будет создан список.
• Зайти на вкладку «Данные», в раздел «Проверка данных».
• В открывшемся окне выбрать вкладку «Параметры», а в перечне «Тип данных» вариант – «Список».
• В появившейся строке необходимо указать все имеющиеся наименования списка. Сделать это можно двумя способами: выделить мышкой диапазон данных в таблице (в примере – ячейки А1-А7) или вбить названия вручную через точку с запятой.
• Выделить все ячейки с нужными значениями, и, щелкнув правой кнопкой мыши, выбрать в контекстном меню пункт «Присвоить имя».
• В строке «Имя» указать наименование списка – в данном случае, «Одежда».
• Выделить ячейку, в которой создан список, и вписать созданное имя в строку «Источник» со знаком «=» вначале.
Итоговый результат выглядит так. Это самый простой вариант выпадающего списка. В зависимости от версии Excel, действий может быть больше или меньше, но в целом, инструкция универсальна для любой программы.

Как добавлять значения в список

Иногда возникает необходимость дополнить уже имеющийся перечень. В раскрывающемся списке все новые пункты отображаются автоматически при добавлении. Однако чтобы связать диапазон ячеек с добавленным вновь элементом, список требуется оформить в виде таблицы. Для этого нужно выделить диапазон значений, найти на вкладке «Главная» пункт «Форматировать как таблицу» и выбрать любой понравившийся стиль, например:

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

Поиск в списке в excel

Я собираюсь вам рассказать о фантастически полезном и эффектном приёме. Это одна из самых интересных вещей, которую мне доводилось видеть в Excel. Кроме того, она достаточно легко реализуется. Если вы разберётесь, как она работает, то вы сразу узнаете об Excel необычно много. Я постараюсь рассказать всё максимально подробно, последовательно и внятно.

Выпадающий список с контекстным поиском

Итак, речь пойдёт о выпадающем списке (так называемый combo box), в который встроена возможность динамического поиска по подстроке, которую пользователь вводит с клавиатуры. Посмотрите пример, в котором мы имеем топ 300 крупнейших городов России. На анимированной иллюстрации видно, как мы динамически сужаем список выбора, вводя подстроку «кр» или «ниж», экономя огромное количество времени. Более того, список меняется после ввода каждого нового символа! Выглядит чрезвычайно привлекательно и профессионально, не так ли? Давайте разбираться, как это устроено.

Файл примера

Пошаговая инструкция

Предварительные замечания

В файле примера выпадающий список с поиском реализован сразу в двух вариантах: для обычного диапазона (лист Range ) и для умной таблицы (лист Table ). Мы будим эти варианты обсуждать одновременно, отмечая их различия.

Шаг 1. Готовим таблицу для списка

Подготовьте таблицу с четырьмя колонками: Город (или то, что вам нужно), Статус , Индекс , Фильтр . Заполните столбец Город значениями. В остальных трёх колонках будут формулы, которые мы обсудим ниже. Я всем рекомендую использовать умную таблицу, так как это значительно проще.

Шаг 2. Формулы для столбца Статус

На примере ячейки F2 рассмотрим формулу, аналогичную для всего столбца Статус (столбец F ). Из F2 формулу можно протягивать вниз до конца, а в случае умной таблицы Excel это сделает за вас. Это также относится ко всем формулам, которые мы будем обсуждать в этой статье.

$B$2 — ячейка, с которой будет связан выпадающий список (добавляется на шаге 6). Что значит связано? Всё, что вы введёте в выпадающий список, тут же отразится в ячейке B2 .

Формула ПОИСК вернёт ошибку, если содержимое B2 не найдено в $E2 . ЕОШИБКА перехватит ошибку и вернёт ИСТИНА, если действительно была ошибка, и — ЛОЖЬ, если строка таки была найдена. Функция НЕ делает из истины ложь и наоборот (инверсирует результат). Таким образом, мы получим в этом столбце ИСТИНА, если подстрока найдена в текущем городе, и наоборот. Обратите внимание, что пустая подстрока содержится в любой строке, поэтому все ячейки столбца Статус имеют значения ИСТИНА, когда мы не ввели ещё ничего в B2 .

= НЕ( ЕОШИБКА ( ПОИСК ( $B$2 ; $E2 ) ) )

=NOT( ISERROR( SEARCH( $B$2; $E2) ) )

= НЕ ( ЕОШИБКА ( ПОИСК ( $B$2 ; [@ Город ]) ) )

=NOT( ISERROR( SEARCH( $B$2; [@Город]) ) )

[@ Город ] — на языке структурных формул умных таблиц это ссылка на ячейку столбца Город в той же строке, в которой находится сама формула. Поскольку ссылка идёт внутри таблицы, то имя самой таблицы в формуле можно не использовать. В остальном всё — тоже самое.

Шаг 3. Формула для столбца Индекс

Если B2 содержит подстроку поиска, то в столбце Статус не все ячейки примут значение ИСТИНА. Статус ИСТИНА будет только там, в чьи названия городов входит соответствующая подстрока. А в столбце Индекс мы рассчитываем номер по порядку для всех строк, которые содержат искомую подстроку. Например, на рисунке ниже B2 содержит «ни», что заставляет столбец Статус быть истинным у строк с городами Нижний Новгород , Калининград , Магнитогорск и т.д., а в столбце Индекс мы начинаем считать факты срабатываний в F : Нижний Новгород — первое срабатывание, Калининград — второе и так далее.

Функция ЕСЛИ отсекает все значения в F , которые не равны ИСТИНА. Функция СЧЁТЕСЛИ подсчитывает количество значений ИСТИНА в F .

= ЕСЛИ( $F2 ; СЧЁТЕСЛИ ( $F$2:$F2 ; ИСТИНА ); «»)

=IF( $F2; COUNTIF( $F$2:$F2; TRUE ); «»)

= ЕСЛИ ( [@ Статус ]; СЧЁТЕСЛИ ( $F$2 :[@ Статус ]; ИСТИНА ); «»)

=IF( [@Статус]; COUNTIF( $F$2:[@Статус]; TRUE ); «»)

Обратите внимание, что диапазон условия в СЧЁТЕСЛИ введен скользящий — вторая координата не закреплена — и во время протягивания она растёт пропорционально таблице. За счёт этого трюка мы получаем механизм подсчёта значения ИСТИНА. Например, 6-я строка будет подсчитывать ИСТИНУ по диапазону $F$2:$F6 (там одно значение — от Нижнего Новгорода ), а 41-я строка будет подсчитывать ИСТИНУ уже по диапазону $F$2:$F41 (а там уже 2 значения — от Нижнего Новгорода и от Калининграда ). Вот суть механизма. Это полезный приём, который стоит запомнить.

Шаг 4. Формула для столбца Фильтр

Теперь наша задача, опираясь на столбец Индекс , сформировать в столбце H отфильтрованный список городов, который необходимо показывать в выпадающем списке.

= ЕСЛИОШИБКА( ИНДЕКС ( стлГород ; ПОИСКПОЗ ( ЧСТРОК ( $G$2:$G2 ); стлИндекс ; 0) ); «»)

=IFERROR( INDEX( стлГород; MATCH( ROWS($G$2:$G2); стлИндекс; 0) ); «» )

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

= ЕСЛИОШИБКА ( ИНДЕКС ( [ Город ]; ПОИСКПОЗ ( ЧСТРОК ( $G$2 :[@ Индекс ]); [ Индекс ]; 0) ); «»)

=IFERROR( INDEX( [Город]; MATCH( ROWS($G$2:[@Индекс]); [Индекс]; 0) ); «» )

Не путайте: [ Индекс ] — ссылка на весь столбец, а [@ Индекс ] — ссылка на ячейку из этого столбца в текущей строке. Никакие дополнительные именованные диапазоны нам создавать нет никакой необходимости, так как мы пользуемся встроенным в умные таблицы сервисом при ссылке на столбцы.

Формула ЧСТРОК ( $G$2:$G2 ) используется для генерации последовательных номеров от 1 (для второй строки) до N (в строке N+1), равному количеству найденных подстрок. Просто генерируется диапазон соответствующего размера, а формула ЧСТРОК возвращает его высоту в строках.

Формула ПОИСКПОЗ ищет номер реальной строки, содержащий соответствующий индекс. Например, в столбце Фильтр мы видим Магнитогорск на третьей позиции, но в реальности он взят из E45 , так как в G45 стоит цифра 3, которую мы и нашли через ПОИСКПОЗ . То есть ПОИСКПОЗ сказал нам, что Магнитогорск находится в 45-й строке, а извлекли мы его оттуда уже при помощи формулы ИНДЕКС .

Если же при извлечении возникает ошибка (текущая строка находится ниже строки N+1), то формула возвращает пустую строку. За это отвечает ЕСЛИОШИБКА .

Поиск значений в списке данных

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

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

В этой статье

Поиск значений в списке по вертикали по точному совпадению

Для выполнения этой задачи можно использовать функцию ВПР или сочетание функций индекс и ПОИСКПОЗ.

Примеры использования функции ВПР

Дополнительные сведения можно найти в разделе функция ВПР.

Примеры ИНДЕКСов и СОВПАДЕНИй

=ИНДЕКС(нужно вернуть значение из C2:C10, которое будет соответствовать ПОИСКПОЗ(первое значение «Капуста» в массиве B2:B10))

Формула ищет первое значение в ячейке C2: C10, соответствующее капусты (в B7), и возвращает значение в C7 (100) — первое значение, соответствующее капусты.

Дополнительные сведения можно найти в разделе Функция индекс и функция ПОИСКПОЗ.

Поиск значений в списке по вертикали по приблизительному совпадению

Для этого используйте функцию ВПР.

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

В приведенном выше примере функция ВПР ищет имя учащегося, у которого есть 6 тардиес в диапазоне A2: B7. В таблице нет записи для 6 тардиес, поэтому функция ВПР ищет следующее самое высокое соответствие ниже 6 и находит значение 5, связанное с первым именем Дэйв, и, следовательно, возвращает Дэйв.

Дополнительные сведения можно найти в разделе функция ВПР.

Поиск значений по вертикали в списке неизвестного размера с точным соответствием

Для выполнения этой задачи используйте функции СМЕЩ и ПОИСКПОЗ.

Примечание: Этот подход используется, если данные находятся в диапазоне внешних данных, который вы обновляете каждый день. Вы знаете, что в столбце B есть Цена, но вы не знаете, сколько строк данных возвращает сервер, а первый столбец не отсортирован по алфавиту.

C1 — это верхняя левая ячейка диапазона (также называемая начальной ячейкой).

Match («апельсины»; C2: C7; 0) ищет оранжевый цвет в диапазоне C2: C7. Не следует включать начальную ячейку в диапазон.

1 — количество столбцов справа от начальной ячейки, для которых должно быть возвращено возвращаемое значение. В нашем примере возвращаемое значение находится в столбце D, Sales.

Поиск значений в списке по горизонтали по точному совпадению

Для выполнения этой задачи используется функция ГПР. Ниже приведен пример.

Функция ГПР выполняет поиск по столбцу Sales и возвращает значение из строки 5 в указанном диапазоне.

Дополнительные сведения можно найти в разделе функции ГПР.

Поиск значений в списке по горизонтали с использованием приблизительного совпадения

Для выполнения этой задачи используется функция ГПР.

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

В приведенном выше примере функция ГПР ищет значение 11000 в строке 3 в указанном диапазоне. Он не находит 11000 и, следовательно, ищет следующее наибольшее значение, которое меньше 1100 и возвращает число 10543.

Дополнительные сведения можно найти в разделе функции ГПР.

Создание формулы подстановки с помощью мастера подстановок (толькоExcel 2007 )

Примечание: Надстройка «Мастер подстановок» прекращена в Excel 2010. Эти функциональные возможности заменены мастером функций и доступными функциями поиска и работы со ссылками (ссылками).

В Excel 2007 мастер подстановок создает формулу подстановки на основе данных листа, имеющих заголовки строк и столбцов. Мастер подстановок помогает находить другие значения в строке, когда вы знаете значение в одном столбце, и наоборот. Мастер подстановок использует индекс и СОВПАДЕНИе в создаваемых формулах.

Щелкните ячейку в диапазоне.

На вкладке формулы в группе решения нажмите кнопку Подстановка .

Если команда подстановка недоступна, необходимо загрузить мастер подстановок надстройка программу.

Загрузка программы-надстройки «Мастер подстановок»

Нажмите кнопку Microsoft Office , щелкните Параметры Excelи выберите категорию надстройки.

В поле Управление выберите элемент Надстройки Excel и нажмите кнопку Перейти.

В диалоговом окне надстройки установите флажок Мастер подстановоки нажмите кнопку ОК.

Поиск ТЕКСТовых значений в MS EXCEL с выводом их в отдельный список. Часть1. Обычный поиск

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

Пусть Исходный список значений (например, перечень инструментов) находится в диапазоне A10:A19 (см. Файл примера ).

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

А. Найти значения, которые содержат критерий

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

Выведем в отдельный диапазон все значения Исходного списка, в которых содержится текст-критерий (например, слово дрель). Критерий вводится в ячейку С6.

Для создания списка, содержащего найденные значения, воспользуемся формулой массива:

=ИНДЕКС(Список; НАИМЕНЬШИЙ(
ЕСЛИ(ЕСЛИОШИБКА(ПОИСК($C$6;Список);0)>0;СТРОКА(Список)-СТРОКА($A$9);30);
СТРОКА(ДВССЫЛ(«A1:A»&ЧСТРОК(Список)))))

Алгоритм работы формулы следующий (для просмотра промежуточных шагов работы формулы воспользуйтесь клавишей F9):

  • Функция ПОИСК() , перебирая элементы исходного списка, определяет, содержится ли в нем значение-критерий. Если значение не содержится, то возвращается ошибка #ЗНАЧ! В противном случае возвращается числовое значение, соответствующее номеру начальной позиции вхождения критерия в значение из списка (здесь нам не важен номер позиции, важно, что это число);
  • Функция ЕСЛИОШИБКА() используется для подавления ошибки #ЗНАЧ! заменяя ее на число 0;
  • Функция ЕСЛИ() заменяет числовые значения, возвращенные функцией ПОИСК() , на номер позиции значения в списке. Если значение =0 (соответствует ошибке #ЗНАЧ!), то возвращается число 30. В принципе, вместо 30 можно указать любое число, которое больше номера последней заполненной позиции Исходного списка (это нужно для правильной сортировки функцией НАИМЕНЬШИЙ() );
  • Функция НАИМЕНЬШИЙ() сортирует массив номеров строк по возрастанию;
  • Функция ДВССЫЛ() возвращает массив последовательных чисел;
  • Функция ИНДЕКС() возвращает текстовые значения из Исходного списка, из строк, номера которых были получены на предыдущем шаге.

В предельном случае м.б. найдено столько же значений, сколько содержится в исходном списке (когда все значения удовлетворяют критерию). Поэтому формулу массива нужно распространять на диапазон той же размерности, что и исходный список. Вышеуказанная формула массива будет возвращать несколько значений, поэтому перед вводом формулы нужно выделить сразу весь диапазон, т.е. ячейки С10:С19, ввести формулу в Строке формул и нажать CRTL+SHIFT+ENTER.

Для скрытия ошибок #ССЫЛКА!, возвращаемой формулой массива, к диапазону С10:С19 применено правило Условного форматирования.

Б. Найти значения, которые совпадают с критерием (точное совпадение)

В этом случае будут выведены все значения, которые совпадают с критерием (без учета РЕгиСТра). Критерий вводится в ячейку E6.

Для создания списка, содержащего найденные значения, воспользуемся формулой массива:
=ИНДЕКС(Список; НАИМЕНЬШИЙ(
ЕСЛИ($E$6=Список;СТРОКА(Список)-СТРОКА($A$9);30);
СТРОКА(ДВССЫЛ(«A1:A»&ЧСТРОК(Список)))))

B. Найти значения, которые начинаются с критерия

В этом случае будут выведены все значения, которые начинаются или совпадают с критерием. Критерий вводится в ячейку G6.

Для создания списка, содержащего найденные значения, воспользуемся формулой массива:
= ИНДЕКС(Список;НАИМЕНЬШИЙ(
ЕСЛИ(ЕСЛИОШИБКА(ПОИСК($G$6;Список);0)=1;СТРОКА(Список)-СТРОКА($A$9);30);
СТРОКА(ДВССЫЛ(«A1:A»&ЧСТРОК(Список)))))

Г. Найти значения, которые заканчиваются на критерий

В этом случае будут выведены все значения, которые заканчиваются или совпадают с критерием. Критерий вводится в ячейку I6.

Для создания списка, содержащего найденные значения, воспользуемся формулой массива:
=ИНДЕКС(Список;НАИМЕНЬШИЙ(
ЕСЛИ($I$6=ПРАВСИМВ(Список;ДЛСТР($I$6));СТРОКА(Список)-СТРОКА($A$9);30);
СТРОКА(ДВССЫЛ(«A1:A»&ЧСТРОК(Список)))))

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

Классический выпадающий список в ячейке листа Excel, сделанный через Данные — Проверка (Data — Validation) — простая и удобная штука, которую ежедневно применяют очень многие пользователи. Однако, у этого списка есть один весьма серьезный недостаток — в нём нет быстрого поиска по первым символам, т.е. фильтрации (отбора) только тех значений, куда введённый фрагмент входит как подстрока. Это серьезно ухудшает удобство пользования даже если в списке всего пара-тройка десятков позиций, а при нескольких сотнях убивает юзабилити напрочь.

Давайте рассмотрим как всё же реализовать подобный трюк. В качестве подопытного кролика возьмём список 250 лучших фильмов по версии IMDb:

Конечная цель — создать выпадающий список (ячейка G3), в котором можно будет быстро находить нужные фильмы, введя только жанр, год или фрагмент названия, например «гамп».

Шаг 1. Определяем, кто нам нужен

Сначала нам нужно понять, какие из исходных ячеек нужно показывать в списке, т.е. определить содержится ли введённый в выпадающем списке текст (например, жанр «детектив») в названии фильма. Для этого добавим слева от исходных данных еще один столбец с функцией ПОИСК (SEARCH ) , которая ищет заданную подстроку в тексте и выдает либо порядковый номер символа, где он был обнаружен, либо ошибку, если его там нет:

Теперь завернем нашу формулу в функцию проверки ЕЧИСЛО (ISNUMBER) , которая превратит числа в логическую ИСТИНУ (TRUE) , а ошибки — в ЛОЖЬ (FALSE) :

Теперь сделаем так, чтобы ЛОЖЬ превратилась в 0, а вместо ИСТИНА в столбце появились последовательно возрастающие индексы-числа 1,2,3. и т.д. Это можно сделать с помощью добавления к нашей же формуле ещё парочки функций:

Здесь функция ЕСЛИ (IF) проверяет что мы имеем (ИСТИНУ или ЛОЖЬ), и

  • если была ИСТИНА, то выводит максимальное значение из всех вышестоящих чисел + 1
  • если была ЛОЖЬ, то выводит 0

Шаг 2. Отбираем в отдельный список

Дальше — проще. Теперь банальной функцией ВПР (VLOOKUP) просто выведём все найденные названия (я добавил столбец с порядковыми номерами для удобства):

После этого можно поиграться, вводя в жёлтую ячейку G2 разные слова и фразы и понаблюдать за тем, как наши формулы отбирают только подходящие фильмы:

Шаг 3. Создаем именованный диапазон

Теперь создадим именованный диапазон, который будет ссылаться на отобранные фильмы. Для этого выбрем на вкладке Формулы команды Диспетчер имен — Создать (Formulas — Name Manager — Create) :

Имя диапазона может быть любым (например, Фильмы), а самое главное — это функция СМЕЩ (OFFSET) , которая и делает всю работу. Напомню её синтаксис, если вы подзабыли:

=СМЕЩ( начальная_ячейка ; сдвиг_вниз ; сдвиг_вправо ; высота ; ширина )

  • В качестве начальной ячейки задаём первую ячейку списка отобранных элементов (E2).
  • Сдвиги вниз и вправо у нас отсутствуют, т.е. равны нулю.
  • Высота диапазона у нас соответствует максимальному значению индекса из столбца А.
  • Ширина диапазона — 1 столбец.

Осталось сделать выпадающий список.

Шаг 4. Создаем выпадающий список

Выделим жёлтую ячейку (G2) и выберем на вкладке Данные команду Проверка данных (Data — Validation) . В открывшемся окне выбрем Список (List) в поле Тип данных (Allow) , а в качестве источника введем имя нашего созданного диапазона со знаком равно перед ним:

Чтобы Excel не ругался при вводе на неточное совпадение наших фраз с исходным списком, на вкладке Сообщение об ошибке (Error Alert) в этом окне нужно выключить флажок Выводить сообщение об ошибке (Show error alert) :

Вот и всё. Можно жать на ОК и наслаждаться результатом:

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

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

Всё, что мы делали на Шагах 1-3 заменяется одной(!) формулой, где новая функция ФИЛЬТР (FILTER) отбирает из исходного диапазона A2:A251 только те фильмы, которые содержат заданную подстроку.

А дальше останется при создании выпадающего списка указать в качестве источника первую ячейку диапазона отобранных фильмов (C2) и добавить к ней знак #, чтобы получить ссылку на весь динамический массив:

И всё. Никаких именованных диапазонов и медленных СМЕЩ, никаких танцев с дополнительными столбцами и формулами. Песня!

Выпадающий список в Excel с помощью инструментов или макросов

Под выпадающим списком понимается содержание в одной ячейке нескольких значений. Когда пользователь щелкает по стрелочке справа, появляется определенный перечень. Можно выбрать конкретное.

Очень удобный инструмент Excel для проверки введенных данных. Повысить комфорт работы с данными позволяют возможности выпадающих списков: подстановка данных, отображение данных другого листа или файла, наличие функции поиска и зависимости.

Создание раскрывающегося списка

Путь: меню «Данные» — инструмент «Проверка данных» — вкладка «Параметры». Тип данных – «Список».

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

  1. Вручную через «точку-с-запятой» в поле «Источник».
  2. Ввести значения заранее. А в качестве источника указать диапазон ячеек со списком.
  3. Назначить имя для диапазона значений и в поле источник вписать это имя.

Любой из вариантов даст такой результат.

Выпадающий список в Excel с подстановкой данных

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

  1. Выделяем диапазон для выпадающего списка. В главном меню находим инструмент «Форматировать как таблицу».
  2. Откроются стили. Выбираем любой. Для решения нашей задачи дизайн не имеет значения. Наличие заголовка (шапки) важно. В нашем примере это ячейка А1 со словом «Деревья». То есть нужно выбрать стиль таблицы со строкой заголовка. Получаем следующий вид диапазона:
  3. Ставим курсор в ячейку, где будет находиться выпадающий список. Открываем параметры инструмента «Проверка данных» (выше описан путь). В поле «Источник» прописываем такую функцию:

Протестируем. Вот наша таблица со списком на одном листе:

Добавим в таблицу новое значение «елка».

Теперь удалим значение «береза».

Осуществить задуманное нам помогла «умная таблица», которая легка «расширяется», меняется.

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

  1. Сформируем именованный диапазон. Путь: «Формулы» — «Диспетчер имен» — «Создать». Вводим уникальное название диапазона – ОК.
  2. Создаем раскрывающийся список в любой ячейке. Как это сделать, уже известно. Источник – имя диапазона: =деревья.
  3. Снимаем галочки на вкладках «Сообщение для ввода», «Сообщение об ошибке». Если этого не сделать, Excel не позволит нам вводить новые значения.
  4. Вызываем редактор Visual Basic. Для этого щелкаем правой кнопкой мыши по названию листа и переходим по вкладке «Исходный текст». Либо одновременно нажимаем клавиши Alt + F11. Копируем код (только вставьте свои параметры).
  5. Сохраняем, установив тип файла «с поддержкой макросов».
  6. Переходим на лист со списком. Вкладка «Разработчик» — «Код» — «Макросы». Сочетание клавиш для быстрого вызова – Alt + F8. Выбираем нужное имя. Нажимаем «Выполнить».

Когда мы введем в пустую ячейку выпадающего списка новое наименование, появится сообщение: «Добавить введенное имя баобаб в выпадающий список?».

Нажмем «Да» и добавиться еще одна строка со значением «баобаб».

Выпадающий список в Excel с данными с другого листа/файла

Когда значения для выпадающего списка расположены на другом листе или в другой книге, стандартный способ не работает. Решить задачу можно с помощью функции ДВССЫЛ: она сформирует правильную ссылку на внешний источник информации.

  1. Делаем активной ячейку, куда хотим поместить раскрывающийся список.
  2. Открываем параметры проверки данных. В поле «Источник» вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).

Имя файла, из которого берется информация для списка, заключено в квадратные скобки. Этот файл должен быть открыт. Если книга с нужными значениями находится в другой папке, нужно указывать путь полностью.

Как сделать зависимые выпадающие списки

Возьмем три именованных диапазона:

Это обязательное условие. Выше описано, как сделать обычный список именованным диапазоном (с помощью «Диспетчера имен»). Помним, что имя не может содержать пробелов и знаков препинания.

  1. Создадим первый выпадающий список, куда войдут названия диапазонов.
  2. Когда поставили курсор в поле «Источник», переходим на лист и выделяем попеременно нужные ячейки.
  3. Теперь создадим второй раскрывающийся список. В нем должны отражаться те слова, которые соответствуют выбранному в первом списке названию. Если «Деревья», то «граб», «дуб» и т.д. Вводим в поле «Источник» функцию вида =ДВССЫЛ(E3). E3 – ячейка с именем первого диапазона.

Выбор нескольких значений из выпадающего списка Excel

Бывает, когда из раскрывающегося списка необходимо выбрать сразу несколько элементов. Рассмотрим пути реализации задачи.

  1. Создаем стандартный список с помощью инструмента «Проверка данных». Добавляем в исходный код листа готовый макрос. Как это делать, описано выше. С его помощью справа от выпадающего списка будут добавляться выбранные значения.
  2. Чтобы выбранные значения показывались снизу, вставляем другой код обработчика.
  3. Чтобы выбираемые значения отображались в одной ячейке, разделенные любым знаком препинания, применим такой модуль.
    Private Sub Worksheet_Change( ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Range( «C2:C5» )) Is Nothing And Target.Cells.Count = 1 Then
    Application.EnableEvents = False
    newVal = Target
    Application.Undo
    oldval = Target
    If Len(oldval) <> 0 And oldval <> newVal Then
    Target = Target & «,» & newVal
    Else
    Target = newVal
    End If
    If Len(newVal) = 0 Then Target.ClearContents
    Application.EnableEvents = True
    End If
    End Sub

Не забываем менять диапазоны на «свои». Списки создаем классическим способом. А всю остальную работу будут делать макросы.

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

  1. На вкладке «Разработчик» находим инструмент «Вставить» – «ActiveX». Здесь нам нужна кнопка «Поле со списком» (ориентируемся на всплывающие подсказки).
  2. Щелкаем по значку – становится активным «Режим конструктора». Рисуем курсором (он становится «крестиком») небольшой прямоугольник – место будущего списка.
  3. Жмем «Свойства» – открывается перечень настроек.
  4. Вписываем диапазон в строку ListFillRange (руками). Ячейку, куда будет выводиться выбранное значение – в строку LinkedCell. Для изменения шрифта и размера – Font.

При вводе первых букв с клавиатуры высвечиваются подходящие элементы. И это далеко не все приятные моменты данного инструмента. Здесь можно настраивать визуальное представление информации, указывать в качестве источника сразу два столбца.

Под выпадающим списком понимается содержание в одной ячейке нескольких значений. Когда пользователь щелкает по стрелочке справа, появляется определенный перечень. Можно выбрать конкретное.

Очень удобный инструмент Excel для проверки введенных данных. Повысить комфорт работы с данными позволяют возможности выпадающих списков: подстановка данных, отображение данных другого листа или файла, наличие функции поиска и зависимости.

Создание раскрывающегося списка

Путь: меню «Данные» — инструмент «Проверка данных» — вкладка «Параметры». Тип данных – «Список».

Создание выпадающего списка.

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

  1. Вручную через «точку-с-запятой» в поле «Источник».
  2. Ввод значений.

  3. Ввести значения заранее. А в качестве источника указать диапазон ячеек со списком.
  4. Проверка вводимых значений.

  5. Назначить имя для диапазона значений и в поле источник вписать это имя.

Имя диапазона.
Раскрывающийся список.

Любой из вариантов даст такой результат.



Выпадающий список в Excel с подстановкой данных

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

  1. Выделяем диапазон для выпадающего списка. В главном меню находим инструмент «Форматировать как таблицу».
  2. Форматировать как таблицу.

  3. Откроются стили. Выбираем любой. Для решения нашей задачи дизайн не имеет значения. Наличие заголовка (шапки) важно. В нашем примере это ячейка А1 со словом «Деревья». То есть нужно выбрать стиль таблицы со строкой заголовка. Получаем следующий вид диапазона:
  4. Выпадающий список.

  5. Ставим курсор в ячейку, где будет находиться выпадающий список. Открываем параметры инструмента «Проверка данных» (выше описан путь). В поле «Источник» прописываем такую функцию:

Ввод значения в источник.

Протестируем. Вот наша таблица со списком на одном листе:

Список и таблица.

Добавим в таблицу новое значение «елка».

Добавлено значение елка.

Теперь удалим значение «береза».

Удалено значение береза.

Осуществить задуманное нам помогла «умная таблица», которая легка «расширяется», меняется.

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

Ввод данных из списка.

  1. Сформируем именованный диапазон. Путь: «Формулы» — «Диспетчер имен» — «Создать». Вводим уникальное название диапазона – ОК.
  2. Создание имени.

  3. Создаем раскрывающийся список в любой ячейке. Как это сделать, уже известно. Источник – имя диапазона: =деревья.
  4. Снимаем галочки на вкладках «Сообщение для ввода», «Сообщение об ошибке». Если этого не сделать, Excel не позволит нам вводить новые значения.
  5. Сообщение об ошибке.

  6. Вызываем редактор Visual Basic. Для этого щелкаем правой кнопкой мыши по названию листа и переходим по вкладке «Исходный текст». Либо одновременно нажимаем клавиши Alt + F11. Копируем код (только вставьте свои параметры).
  7. Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim lReply As Long
     
        If Target.Cells.Count > 1 Then Exit Sub
        If Target.Address = "$C$2" Then
         If IsEmpty(Target) Then Exit Sub
           If WorksheetFunction.CountIf(Range("Деревья"), Target) = 0 Then
              lReply = MsgBox("Добавить введенное имя " & _
                             Target & " в выпадающий список?", vbYesNo + vbQuestion)
              If lReply = vbYes Then
                  Range("Деревья").Cells(Range("Деревья").Rows.Count + 1, 1) = Target
              End If
           End If
         End If
    End Sub
     
  8. Сохраняем, установив тип файла «с поддержкой макросов».
  9. Сообщение об ошибке.

  10. Переходим на лист со списком. Вкладка «Разработчик» — «Код» — «Макросы». Сочетание клавиш для быстрого вызова – Alt + F8. Выбираем нужное имя. Нажимаем «Выполнить».

Макрос.

Когда мы введем в пустую ячейку выпадающего списка новое наименование, появится сообщение: «Добавить введенное имя баобаб в выпадающий список?».

Нажмем «Да» и добавиться еще одна строка со значением «баобаб».

Выпадающий список в Excel с данными с другого листа/файла

Когда значения для выпадающего списка расположены на другом листе или в другой книге, стандартный способ не работает. Решить задачу можно с помощью функции ДВССЫЛ: она сформирует правильную ссылку на внешний источник информации.

  1. Делаем активной ячейку, куда хотим поместить раскрывающийся список.
  2. Открываем параметры проверки данных. В поле «Источник» вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).

Имя файла, из которого берется информация для списка, заключено в квадратные скобки. Этот файл должен быть открыт. Если книга с нужными значениями находится в другой папке, нужно указывать путь полностью.

Как сделать зависимые выпадающие списки

Возьмем три именованных диапазона:

Три именованных диапазона.

Это обязательное условие. Выше описано, как сделать обычный список именованным диапазоном (с помощью «Диспетчера имен»). Помним, что имя не может содержать пробелов и знаков препинания.

  1. Создадим первый выпадающий список, куда войдут названия диапазонов.
  2. Список диапазонов.

  3. Когда поставили курсор в поле «Источник», переходим на лист и выделяем попеременно нужные ячейки.
  4. Таблица со списком.

  5. Теперь создадим второй раскрывающийся список. В нем должны отражаться те слова, которые соответствуют выбранному в первом списке названию. Если «Деревья», то «граб», «дуб» и т.д. Вводим в поле «Источник» функцию вида =ДВССЫЛ(E3). E3 – ячейка с именем первого диапазона.
  6. Второй раскрывающийся список.

    Выбор нескольких значений из выпадающего списка Excel

    Бывает, когда из раскрывающегося списка необходимо выбрать сразу несколько элементов. Рассмотрим пути реализации задачи.

    1. Создаем стандартный список с помощью инструмента «Проверка данных». Добавляем в исходный код листа готовый макрос. Как это делать, описано выше. С его помощью справа от выпадающего списка будут добавляться выбранные значения.
    2. Private Sub Worksheet_Change(ByVal Target As Range)
          On Error Resume Next
          If Not Intersect(Target, Range("Е2:Е9")) Is Nothing And Target.Cells.Count = 1 Then
              Application.EnableEvents = False
              If Len(Target.Offset(0, 1)) = 0 Then
                  Target.Offset(0, 1) = Target
              Else
                  Target.End(xlToRight).Offset(0, 1) = Target
              End If
              Target.ClearContents
              Application.EnableEvents = True
          End If
      End Sub
       
    3. Чтобы выбранные значения показывались снизу, вставляем другой код обработчика.
    4. Private Sub Worksheet_Change(ByVal Target As Range)
          On Error Resume Next
          If Not Intersect(Target, Range("Н2:К2")) Is Nothing And Target.Cells.Count = 1 Then
              Application.EnableEvents = False
              If Len(Target.Offset(1, 0)) = 0 Then
                  Target.Offset(1, 0) = Target
              Else
                  Target.End(xlDown).Offset(1, 0) = Target
              End If
              Target.ClearContents
              Application.EnableEvents = True
          End If
      End Sub
       
    5. Чтобы выбираемые значения отображались в одной ячейке, разделенные любым знаком препинания, применим такой модуль.

    6. Private Sub Worksheet_Change(ByVal Target As Range)
          On Error Resume Next
          If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then
              Application.EnableEvents = False
              newVal = Target
              Application.Undo
              oldval = Target
              If Len(oldval) <> 0 And oldval <> newVal Then
                  Target = Target & "," & newVal
              Else
                  Target = newVal
              End If
              If Len(newVal) = 0 Then Target.ClearContents
              Application.EnableEvents = True
          End If
      End Sub

    Не забываем менять диапазоны на «свои». Списки создаем классическим способом. А всю остальную работу будут делать макросы.

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

    1. На вкладке «Разработчик» находим инструмент «Вставить» – «ActiveX». Здесь нам нужна кнопка «Поле со списком» (ориентируемся на всплывающие подсказки).
    2. Вставить ActiveX.

    3. Щелкаем по значку – становится активным «Режим конструктора». Рисуем курсором (он становится «крестиком») небольшой прямоугольник – место будущего списка.
    4. Элемент ActiveX.

    5. Жмем «Свойства» – открывается перечень настроек.
    6. Свойства ActiveX.

    7. Вписываем диапазон в строку ListFillRange (руками). Ячейку, куда будет выводиться выбранное значение – в строку LinkedCell. Для изменения шрифта и размера – Font.

    Скачать пример выпадающего списка

    При вводе первых букв с клавиатуры высвечиваются подходящие элементы. И это далеко не все приятные моменты данного инструмента. Здесь можно настраивать визуальное представление информации, указывать в качестве источника сразу два столбца.

Like this post? Please share to your friends:
  • Поиск в документе excel сочетание клавиш
  • Поиск в документе excel vba
  • Поиск в документах word по содержимому программа
  • Поиск в диапазоне строк excel
  • Поиск в диапазоне по значению в ячейке excel