Найти тему
Андрей Сухов

Выпадающий список с поиском (функция СМЕЩ)

В предыдущих заметкам я рассмотрел самый простой вариант реализации выпадающего списка с поиском.

Давайте рассмотрим второй, более сложный, но и более универсальный вариант.

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

Функция ПОИСК
Функция ПОИСК

Далее по аналогии с помощью функции ЕЧИСЛО конвертируем полученные значения в ИСТИНУ или ЛОЖЬ.

Функция ЕЧИСЛО
Функция ЕЧИСЛО

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

Преобразовываем ИСТИНУ в порядковые числа
Преобразовываем ИСТИНУ в порядковые числа

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

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

Подтягиваем только нужные значения с помощью функции ВПР
Подтягиваем только нужные значения с помощью функции ВПР

Размножим формулу автозаполнением на весь диапазон, который по размеру равен исходной таблице.

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

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

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

Для этого на вкладке Формулы (1) выберем инструмент Диспетчер имен (2) и создадим новое имя (3). В качестве имени диапазона можно указать что угодно, например, «фио» (4). Ну а так как размеры диапазоны все время будут изменяться, то без формул (5) тут не обойтись. Нам пригодится функция СМЕЩ (OFFSET).

Создание именованного диапазона
Создание именованного диапазона

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

Функция СМЕЩ
Функция СМЕЩ

Укажем абсолютную ссылку на начальную ячейку G2, ну а так как сдвиг вниз и вправо у нас отсутствует, то следующие два аргумента будут равны нулю. Четвертый аргумент будет определять размер диапазона и это будет максимальное значение из вспомогательного столбца первой таблицы. Получить его очень просто с помощью функции МАКС. Ну и так как диапазон у нас имеет ширину в один столбец, то последний аргумент будет единицей.

=СМЕЩ($G$2;0;0;МАКС($A:$A);1)

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

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

Все готово и список также будет работать.

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

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

Подставляем телефон с помощью функции ВПР
Подставляем телефон с помощью функции ВПР

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

Ссылки на мои ресурсы по Excel

YouTube-канал по Excel и Word

Телеграм

Авторские курсы

Наука
7 млн интересуются