Связанные выпадающие списки в табличках Google
Ты получишь возможность сделать в табличках Google свои связанные выпадающие списки:
Всего в несколько простых шагов.
Шаг 1. Скачай себе файл с примером
Перейдя по ссылкам ниже, ты получишь доступ к готовым файлам:- Базовая версия (описана в видео )
- Новая версия — доработанная и улучшенная.
Совет. Эти файлы открыты для просмотра, но не для редактирования. Поэтому сразу создай свою копию: меню Файл → Создать копию. Далее об этом я расскажу подробнее.
Сравни 2 версии скрипта:
Базовая версия
| Новая версия | ||
средняя оценка пользователей | ★★★☆☆ - 3,4 | ★★★★★ - 4,7 | |
оценить | оценить | ||
Среднее время выполнения в секундах | 0,3 | 0,4 | |
бесплатно и не для продажи | |||
Легко увеличить к-во связанных выпадающих списков | |||
автоматически заполняет единственное значение | |||
Работает с дублями | |||
Не нужно сортировать исходную таблицу | |||
Работает с числами и с текстом | |||
Работает с дробными десятичными числами | |||
функция "умного" удаления | |||
Работает с датами |
Ты можешь попробовать обе версии, а так же получить известие в случае появления новых версий. Ключевые вопросы по проекту я постарался осветить ниже. Жду комментариев под статьей: интересуют твои пожелания, отзывы и мысли.
# | ? | = |
Вопросы + Ответы
|
---|---|---|---|
01 | ? | = | БыстродействиеОтвет, разумеется, предел есть! Но он зависит не от скрипта, а от скорости работы табличек в целом. Я рекомендую использовать скрипт с данными:
|
02 | ? | = | Почему не выходит редактировать файл с примером
Доступ на редактирование файла с готовым скриптом я не даю, т.к. скрипт нужен всем. Ты откроешь мой пример и обнаружишь, что менять в нем ничего нельзя.
Но можно зайти в меню «файл → Создать копию» и тогда уже это будет твоя копия. Делай с ней, что хочешь, используй, дорабатывай под свои нужды, пиши мне свои отзывы и пожелания, наиболее частые из которых я обязательно учту при дальнейшей разработке проекта. |
03 | ? | = | Где находится скрипт
Настройка скрипта вообще не составит тебе труда.
Для начала зайди в место, где этот скрипт находится. Для этого можно нажать меню «Инструменты → редактор скриптов». А еще, если ты пользуешься браузером Chrome, ты можешь воспользоваться сочетанием клавиш:
Совет: используй разные сочетания клавиш в табличках Google Но продолжим. Когда ты зайдешь в редактор скриптов, ты там увидишь текст моего скрипта. Он длинный: Но тебе потребуется только поменять настройки, которые я специально разместил в самом начале скрипта. Тут потребуется хорошо потрудится: изменить пару цифр и букв, думаю, справишься ;) Для справки. К каждой таблице Goolge может быть привязан свой набор скриптов. Для использования того же скрипта в другом файле, необходимо скопировать весь текст кода в редактор скриптов другого файла. |
04 | ? | = | Что конкретно менять в скрипте
Итак, ты уже открыл редактор скриптов и хочешь поменять настройки «под себя». Там так и будет написано: «Изменить настройки». Давай разберёмся по пунктам.
↑ Вместо слова «Основной» вставь имя рабочего листа, на котором ты будешь делать связанные выпадающие списки.
↑ Создай лист с исходными данными для списка, а его название впиши в скрипт.
↑ В нашем примере 4 связанных выпадающих списка. Если нужно, замени их количество на свое, впиши вместо 4 свое число.
↑ Впиши номер колонки, с которой начинается твоя таблица.
↑ Шапка таблицы не должна затрагиваться скриптом, поэтому впиши сюда номер строки, с которой начинаются твои данные. |
05 | ? | = | Как приготовить данные
При желании можно добавить еще парочку в конце:
или в начале:
Как тебе сделать свой список? Просто сделай его по примеру моего:
|
06 | ? | = | Как сделать первый выпадающий список?
Первый список нужно будет настроить вручную. Полученные данные нельзя сразу использовать для создания первого выпадающего списка. В моем примере первый уровень данных содержит названия планет, и они повторяются т.к. одна планета содержит несколько континентов, стран и так далее. А нам нужен список уникальных значений.
Для получения списка уникальных значений, используй формулу: = UNIQUE(A2:A) Она очень простая и выдает список уникальных значений. Эту формулу рекомендую написать на 4 колонки правее основных данных: Либо вообще размести ее на новом листе: = UNIQUE(Данные!A2:A) После того, как ты получишь список, переходи на свой рабочий лист. Выдели диапазон ячеек, в котором будет находиться будущий выпадающий список. Иди в меню Данные → Проверка данных... и выбери там свой список. Совет. При выборе данных для выпадающего списка ты можешь учесть необходимость в добавлении новых значений в дальнейшем. Если данные содержатся в диапазоне A1:A20, то ты можешь выбрать бо́льший диапазон для проверки данных: A1:A100. Пустые ячейки будут игнорироваться. После этой настройки связанные выпадающие списки уже можно использовать! Теперь поговорим о приятных деталях. |
07 | ? | = | Как увеличить количество связанных списков
↑ В нашем примере 4 связанных выпадающих списка. Вместо 4 поставь свое число.И, конечно, не забудь под это изменить данные для выбора значений выпадающих списков. Как видишь, это сделать очень легко. |
08 | ? | = | Как скрипт автоматически заполняет единственное значениеНапример, мы выбрали часть света = "Азия". В справке "Азии" соответствует только одна страна = "Китай ", а для "Китая" найден лишь один город = "Пекин". Вот, что произойдет при выборе "Азии": скрипт автоматически вставит "Китай" и "Пекин" в нужные ячейки. Правда, удобно? |
09 | ? | = | Как скрипт работает с дублямиХорошая новость! В текущей версии скрипта списки могут содержать дубли, они будут нормально считываться. |
10 | ? | = | Нужно ли сортировать исходную таблицуСовет. Новые данные можно заполнять вручную, а можно автоматизировать: например, при помощи другого скрипта, или с помощью форм Google. Работа с другими типами данных
Пока реализована работа со следующими типами данных:
|
11 | ? | = | Про функцию «умного» удаленияВо-первых, как видишь, можно автоматически копировать часть списков, а остальные подтянутся. Ну и, выбрав первый уровень списков и нажав [Delete], ты можешь
|
12 | ? | = | Лучше один раз увидеть
Это видео немного устарело, но описание в нем вполне подойдет и для последней версии скрипта:
|
13 | ? | = | Обратная связь
Жду комментариев.
Наиболее частым вопросом пользователей является:
Сделал файл для таких случаев:
|
Здравствуйте, Максим!
ОтветитьУдалитьСкрипт не хочет работать со списками больше, чем 500 записей.
Например, есть 2 уровня: Страна, Город. Если выбрать страну с небольшим количеством городов, то всё прекрасно. А если выбрать с более чем 500 городов, то возникает ошибка:
Не удалось завершить выполнение за 6,236 сек. Превышено максимальное число значений в правиле (500). Используйте критерий "Значения из диапазона".
Как победить не знаю(
Здравствуйте, такое не победить. Это ограничение гугла. Можно решить только переписыванием логики скрипта. Я сейчас работаю над новой логикой. Когда будет готов новый механизм, отпишусь в Гугл+
ОтветитьУдалитьХорошо, спасибо.
УдалитьДумаю, для решения моей задачи будет оптимальным такое решение:
В листе с данными: вся первая строка - список городов, под ними - список городов в столбик.
В основном листе: первый уровень - выбор значения страны из первой строки с данными. После изменения значения находим номер колонки, содержащий эту страну, и в соседнюю ячейку вставляем правило с диапазоном городов всей этой колонки, кроме первой строки.
Но я плохо ориентируюсь со скриптовым АПИ гуглотаблиц((
Добрый день, Максим! Спасибо за Ваши инструкции и скрипты и подробные описания. Это очень пригодилось нам.
ОтветитьУдалитьМы столкнулись с такой особенностью: воспользоваться функцией связанных выпадающих списков на целевой странице может только владелец документа. Другие пользователи не могут, даже если им открыт доступ для редактирования документа. Они могут только выбрать из первого выпадающего списка, при этом остальные списки не подтягиваются. Подскажите пожалуйста можно ли как-то обойти это ограничение без изменения владельца? Заранее спасибо!
Добрый день, если на листе есть защищенный диапазон, то другие пользователи не смогут пользоваться скриптом.
УдалитьСпасибо за оперативный ответ! Убрали защищенные диапазоны, сразу все заработало :)
УдалитьМаксим доброго времени суток, подскажите можно ли в выпадающий список передавать полные данные ячейки? т.е. гиперссылку с текстом например:
ОтветитьУдалить=ГИПЕРССЫЛКА("http://hyperlink.com";"текст_ячейки") ?
как вариант использовать только гиперссылку http://hyperlink.com, но это уже крайний не очень удобный способ, может нужно в скрипте что подправить?
Добрый день!
УдалитьВыпадающие списки Гугла так не умеют. Поэтому запрограммировать это нельзя.
Спасибо огромное, это большой труд, и наверное единственное решение, которое так подробно расписано, для гугл таблиц! Помогите разобраться, почему не хочет формироваться список в D1. Начальные строка и колонка выбраны правильно, список уникальных стран сформировал, а города не подтягиваются. Уровня всего 2 - страна, город. В D1 получаю !ERROR синтаксическая ошибка в формуле.
ОтветитьУдалитьВиталий, спасибо за отзыв!
УдалитьНе знаю, в чем ошибка. Я решил повторить все шаги для 2-мерного списка, второй список находится в колонке D.
Таблица работает нормально:
https://docs.google.com/spreadsheets/d/1eY-XGX4YaR5JHFfP_ERgNaoMjDhj0hB3yaSb5-kI-CI/edit#gid=127492123
Максим, добрый день. Подскажите, пожалуйста, можно ли сделать так, чтобы выпадающие списки работали в одном документе на разных вкладках. Я имею в виду, что лист с исходными данными - один, и принцип сортировки и отбора везде одинаковый, просто выпадающие списки дублируются на разных листах. Правильно ли я понимаю, что для этого необходимо добавить новый проект и продублировать скрипт? Или не так?
ОтветитьУдалитьСмотрите пример скрипта в самом конце статьи в разделе Обратная связь.
УдалитьОтдельный скрипт не нужно делать, но нужно несколько ссылок на существующий.
Максим, спасибо за Вашу работу! Я просмотрела раздел "Обратная связь". Там речь идет о создании нескольких разных выпадающих списков на одной вкладке (одном листе), а вопрос пользователя был о создании одинаковых выпадающих списков на разных вкладках. У меня стоит такая же задача. В редакторе скриптов я дублирую Ваш скрипт несколько раз и каждый раз меняю наименования листов, но работает все только для того листа, что указан в скрипте последним. Очень надеюсь на вашу помощь
УдалитьМаксим, я создала отдельный проект для каждого листа, в каждом проекте по одному скрипту. Заработало. Еще раз спасибо
УдалитьДарья, а как вы привязали новый проект к своей таблице? Или как вы создаете новый дополнительный проект для таблицы?
УдалитьМаксим, спасибо большое за скрит, но столкнулся с проблемой. при определенном раскладе (закономерности так и не увидел) списки не могут выдать конечный столбец пишет н/д мол функция фильтра не нашла нужного значения. хотя все заполнено по порядку с конца( по вашему гайду) с чем это может быть связано? потому как в другой аналогичной строке все работает отлично.
ОтветитьУдалитьЛеонид, не могу сказать. Нужно уметь воспроизвести ошибку, чтобы ее исправить иначе не смогу найти в чем ошибка и исправить.
УдалитьМаксим, подскажите, у меня в четвертом столбике выбивает ошибку "В ячейке K3 нарушены правила проверки данных. Укажите одно из следующих значений: #N/A." как это можно исправить?
ОтветитьУдалитьБойлер Маркет, причины могут быть разные.
УдалитьНужен пример файла, чтобы сказать точно.
Этот комментарий был удален автором.
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьМаксим, спасибо за скрипт!
ОтветитьУдалить1.Подскажите, как и где можно поменять в коде, чтобы списки создавались не в соседних ячейках. Например я в ячейки B2 выбираю первое значение, а следующее значение-список создается к примеру с ячейки F2.
2. можно ли сделать так чтобы последнее значение создавалось без возможности выбора. Объясню, допустим список Завод-Номеклатура-Цвет-Кол-во в пачке. Количество для каждой позиции неизменно и скрипт автоматически вставит значение после выбора цвета, но в ячейки он покажется как поле со списком, можно ли это обойти.
3. Можно ли пропустить значение в списке, допусти не в каждой номенклатуре есть цвет, тогда поле с количеством не выдаст значения?
Артем,
Удалитьв этом скрипте нет возможности сделать списки в произвольных колонках.
Пожалуйста, попробуйте мой последний скрипт, полностью переписанный:
https://sheetswithmaxmakhrov.wordpress.com/2018/01/03/smart-data-validation-create-dependent-drop-down-lists-in-goole-sheets/
Он позволяет сделать любой порядок колонок.
Пункты 2 и 3 -- нет такой возможности.
УдалитьАнонимный подал хорошую идею:
Удалить----------------------------
Если последнее значение статическое в списке, то можно его выводить не как список, а с помощью функции ВПР с автозаполнением столбца (пример ВПР
+ автозаполнения есть у Максима на Ютубе).
Если последнее значение статическое в списке, то можно его выводить не как список, а с помощью функции ВПР с автозаполнением столбца (пример ВПР
ОтветитьУдалить+ автозаполнения есть у Максима на Ютубе).
У меня так запоняються на производстве единицы измерения - кг, шт, литр.
Добрый день,
Удалитьспасибо за вариант решения!
Спасибо огромное за ваш портал и максимально исчерпывающий материал. Благодаря вам даже самые несмышленные в гугл таличках имеют шанс теперь хоть чуточку оптимизировать процесс!
ОтветитьУдалитьПривет, Максим!
ОтветитьУдалитьСкрипт не хочет работать, если значения в первом столбце (1 уровень) заносятся не человеком, а другим скриптом. В этом случае в ячейке рядом (2 уровень) пусто.
Но если я в первом уровне значения ввожу сам (через выпадающий список, печатаю или вставляю из буфера обмена), все работает нормально.
Подскажите как исправить данный баг?
Заранее спасибо!
Привет, Павел!
УдалитьТ.к. заносится другим скриптом, то этот другой скрипт нужно подключить к моему.
Есть костыльный способ "подделать" действия пользователя. Он описан здесь:
https://stackoverflow.com/questions/16089041/how-can-i-test-a-trigger-function-in-gas
Но лучше напрямую запустить.
Сделал подключил теперь свежую версию с гитхаба (там где Master.gs), но ошибка так и осталась. Не понимаю логики, в ячейке A1 есть данные (какая разница как они были туда добавлены человеком или другим скриптом), но в ячейке B1 пусто (не появляется выпадающий список)
ОтветитьУдалитьэто просто капец :(
Здравствуйте, Максим
ОтветитьУдалитьВы проделали более чем отличную работу. После детального ознакомления со скриптом, у меня возник вопрос. Подскажите, пожалуйста:
Вкладка "Данные" имеет Планета, Континент, Страна, Город.
Вопрос: как оставить только Планета и Континент, а Страну и Город - удалить?
Спрашиваю т.к. есть необходимость только в списке на Два уровня.
В ожидании ответа,
Юрий
Юрий,
Удалитьможно создать отдельную вкладку и перетянуть туда формулой только требуемые колонки:
={'Данные'!A:B}
Добрый день. Пытаюсь настроить скрипты по одному из трех способов представленных Вами ранее , и постоянно с работой таблицы возникают проблемы. Сегодня пытаясь прописать данный скрипт, вышла такая ошибка: "TypeError: Не удается прочитать свойство "source" объекта undefined. (строка 37, файл Код)" подскажите, пожалуйста, как ее убрать
ОтветитьУдалитьДМ Юрист Невзоров, добрый день!
УдалитьСкрипт запускается из триггера автоматически. Если пытаться его запустить из редактора скриптов, объект "событие" будет не определен, то есть undefined, о чем и сообщает ошибка.
Добрый день, Максим!
ОтветитьУдалитьБольшое спасибо за алгоритм. Подскажите, а возможно сделать выпадающий список 2-го уровня под списком 1-го уровня?
Спасибо!
Илья
Присоединяюсь к вопросу!
УдалитьМакс, спасибо! Воспользовался пока самым простым двухуровневым списком, но уверен, что мне скрипт ещё пригодится!
ОтветитьУдалитьДобрый день! Опробовала все возможные версии вашего скрипта, но везде не дает сделать 9 уровней списка. С 6 списка начинает выдавать ошибку N/A. Ссылку на документ прикладываю https://docs.google.com/spreadsheets/d/1tFf5zEvKyzUPAU3qdOduHW3Y9LtPTMqMPdBMqQX3Acc/edit?usp=sharing
ОтветитьУдалитьОчень надеюсь на помощь! Уже всю голову сломала.
Не работает ваша обновленная табличка - это так должно быть?
ОтветитьУдалитьКак добавить такое список на несколько листов?
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьМакси добрый день!
ОтветитьУдалитьВоспользовалась вашим скриптом, но есть проблема
скрипт распространился на все листы. хотя названия я поменяла
т.е добавляю новый лист в книгу и начинаю вводить данные и автоматом срабаывает проверка данных, хотя я ее не делаю, удаляю проверку данных на всем листе но когда начинаю заносить данные она появляется опять, помогите .....
Спасибо за скрипт!
ОтветитьУдалитьУ меня есть вопрос: если я создаю дополнительный новый лист, как мне на него распространить действие скрипта?
Если я создаю просто новый скрипт, копирую и вставляю туда данные рабочего скрипта, изменив наименование листа, то выполняется только один: последний добавленный скрипт.
Если создаю новый проект, копирую и вставляю туда данные рабочего скрипта, то он не привязан ни к одной таблице. Не знаю как прикрепить его именно к рабочей таблице.
Как в данной ситуации поступить?
Здравствуйте!
ОтветитьУдалитьСпасибо за скрипт!
У меня количество уровней выпадающего списка 2.
На листе, на котором настроены выпадающие списки можно сделать так, чтобы данные были в разных столбцах, но чтоб связь не пропадал? Пример. Планета в столбце D, а Континент в столбце G.
За ранее спасибо большое!