
👌 Множественный выбор в Google Таблицах: скрипт для ячеек с проверкой данных
Выпадающий список в Google Таблицах, штука удобная. Настроил проверку данных, и ячейка принимает только значения из диапазона. Но есть загвоздка: выбрать можно лишь один пункт. А если в задаче нужен тег «срочно, бюджетно, дизайн», три значения в одной ячейке? Стандартными средствами, никак.
На практике эта потребность всплывает постоянно: категоризация расходов, теги к задачам, списки участников. Каждый раз открывать редактор и дописывать значения через запятую, терять время. Решение, маленький скрипт на Google Apps Script, который добавляет боковую панель с чекбоксами для любого диапазона проверки данных.
Ниже, пошаговая настройка: от создания файла скрипта до готового меню «Scripts» в вашей таблице. Код проверен на реальных таблицах, работает без дополнительных разрешений и не требует знания программирования.
💡 Быстрый обзор:
- Настройте проверку данных для ячейки по диапазону и выберите показ предупреждения вместо отклонения ввода
- Создайте два файла в редакторе скриптов:
multi-select.gsс логикой иdialog.htmlс интерфейсом боковой панели - Сохраните проект, обновите таблицу, в меню появится пункт Scripts
- Выберите ячейку с проверкой данных, запустите скрипт и отметьте нужные значения чекбоксами
- Нажмите Select, ячейка заполнится выбранными пунктами через запятую
Шаг 1: Готовим таблицу и проверку данных
Откройте Google Таблицу, с которой работаете. Выделите целевую ячейку (или диапазон) и задайте проверку данных: Данные → Настроить проверку данных. В поле «Правила» выберите «Значение из диапазона» и укажите список, из которого будут браться варианты.
Важный момент: не включайте «Отклонять ввод», если включить, скрипт не сможет записать в ячейку несколько значений через запятую. Достаточно показывать предупреждение.
Если готового диапазона нет, создайте отдельный лист «Справочник» и перечислите там все допустимые значения в столбик. Ссылайтесь на этот диапазон в проверке данных.
Шаг 2: Создаём скрипт Apps Script
В меню Таблицы: Расширения → Apps Script. Откроется редактор, чистая вкладка с пустым файлом. Первым делом создадим серверную часть.
Нажмите Файл → Создать → Файл скрипта. Назовите его multi-select.gs и вставьте код:
1 function onOpen(e) { 2 SpreadsheetApp.getUi() 3 .createMenu('Scripts') 4 .addItem('Multi-select for this cell...', 'showDialog') 5 .addToUi(); 6 } 7 8 function showDialog() { 9 var html = HtmlService.createTemplateFromFile('dialog').evaluate(); 10 SpreadsheetApp.getUi() 11 .showSidebar(html); 12 } 13 14 var valid = function() { 15 try { 16 return SpreadsheetApp.getActiveRange() 17 .getDataValidation() 18 .getCriteriaValues()[0] 19 .getValues(); 20 } catch(e) { 21 return null; 22 } 23 }; 24 25 function fillCell(e) { 26 var s = []; 27 for (var i in e) { 28 if (i.substr(0, 2) == 'ch') s.push(e[i]); 29 } 30 if (s.length) SpreadsheetApp.getActiveRange().setValue(s.join(', ')); 31 }
Что здесь происходит: onOpen добавляет пункт «Multi-select for this cell…» в пользовательское меню таблицы. showDialog открывает боковую панель с HTML-интерфейсом. Функция valid извлекает список допустимых значений из проверки данных активной ячейки. А fillCell собирает отмеченные чекбоксы и записывает их в ячейку через запятую.
Обратите внимание: i.substr(0, 2) фильтрует только те параметры, чьё имя начинается с ch, это идентификаторы чекбоксов из HTML-формы. Остальные параметры игнорируются.
Нажмите Файл → Сохранить (или Ctrl+S). При первом сохранении скрипт запросит разрешения, это нормально, без них он не сможет читать данные ячейки и показывать боковую панель.
Шаг 3: Добавляем HTML-интерфейс
Теперь создадим саму боковую панель. В том же редакторе: Файл → Создать → HTML-файл. Назовите dialog.html и вставьте:
1 <div style="font-family: sans-serif;"> 2 <? var data = valid(); ?> 3 <form id="form" name="form"> 4 <? if (Object.prototype.toString.call(data) === '[object Array]') { ?> 5 <? for (var i = 0; i < data.length; i++) { ?> 6 <? for (var j = 0; j < data[i].length; j++) { ?> 7 <input type="checkbox" 8 id="ch<?= '' + i + j ?>" 9 name="ch<?= '' + i + j ?>" 10 value="<?= data[i][j] ?>"> 11 <?= data[i][j] ?><br> 12 <? } ?> 13 <? } ?> 14 <? } else { ?> 15 <p>This cell has no 16 <a href="https://support.google.com/drive/answer/139705?hl=en">Data validation</a>. 17 </p> 18 <? } ?> 19 <input type="button" value="Select" 20 onclick="google.script.run.fillCell(this.parentNode)" /> 21 <input type="button" value="Refresh validation" 22 onclick="google.script.run.showDialog()" /> 23 </form> 24 </div>
Логика простая: серверный тег <? var data = valid(); ?> вызывает функцию valid() из GS-файла и получает массив допустимых значений. Если диапазон задан, рендерятся чекбоксы, по одному на каждое значение. Кнопка Select отправляет форму в fillCell, кнопка Refresh validation, перечитывает проверку данных (удобно при переключении между ячейками).
Если выделенная ячейка не имеет проверки данных, панель покажет сообщение со ссылкой на справку Google.
Сохраните файл: Файл → Сохранить. Оба файла (multi-select.gs и dialog.html) должны лежать в одном проекте.
Шаг 4: Запускаем и пользуемся
Вернитесь в таблицу и обновите страницу. Через пару секунд в строке меню появится новый пункт Scripts, это результат работы onOpen.
Теперь рабочий цикл:
- Выберите любую ячейку, для которой настроена проверка данных по диапазону.
- Перейдите в Scripts → Multi-select for this cell….
- Справа откроется боковая панель со списком чекбоксов, все значения из вашего диапазона проверки.
- Отметьте нужные пункты и нажмите Select.
- Ячейка заполнится выбранными значениями через запятую:
срочно, бюджетно, дизайн.
Боковую панель можно не закрывать. Просто кликните другую ячейку (тоже с проверкой данных) и нажмите Refresh validation, список чекбоксов обновится под новую ячейку.

На скриншоте, результат: ячейка с проверкой данных, боковая панель с активными чекбоксами и меню Scripts в строке. Именно так решение выглядит в работе.
Шаг 5: Что можно улучшить
Базовый скрипт решает задачу «выбрать несколько значений из выпадающего списка», и для большинства сценариев этого достаточно. Но если вы работаете с таблицей интенсивно, есть пара доработок:
- Добавить «Select All» / «Deselect All». Две кнопки в HTML-форме, которые программно ставят или снимают все чекбоксы. Пара строк на JavaScript, и экономия десятка кликов на большом диапазоне.
- Заменить запятую на другой разделитель. В функции
fillCellстрокаs.join(', ')склеивает значения через запятую. Если в ваших данных запятая, часть значения, замените на;или|. - Автообновление при смене ячейки. Вместо ручного нажатия «Refresh validation» можно повесить триггер на событие выбора ячейки (
onSelectionChange), но это требует чуть более сложного кода и установки триггера вручную.
Исходный код скрипта, адаптация решения Александра Иванова, выложенная Arthur Attwell на GitHub Gist. Там же можно посмотреть обсуждение и доработки от сообщества.
Ниже, видеоинструкция на английском, если удобнее смотреть, а не читать:
⁉️🤔 Частые вопросы
Скрипт не появляется в меню после сохранения. Что делать?
Обновите страницу таблицы (F5 или Ctrl+R). Если не помогло, проверьте, что функция называется именно
onOpen(регистр важен), и что в редакторе скриптов нет ошибок: Вид → Логи покажет stack trace. Иногда помогает закрыть редактор скриптов и открыть заново.
Боковая панель открывается, но чекбоксов нет, только сообщение про Data Validation.
Значит, выделенная ячейка не имеет проверки данных по диапазону. Выберите ячейку, для которой вы настраивали проверку в Шаге 1. Если проверка настроена на диапазон ячеек, а не на одну, убедитесь, что активна именно та ячейка, которая входит в диапазон.
Можно ли использовать скрипт на нескольких листах одной таблицы?
Да. Скрипт привязан к контейнеру (таблице), а не к конкретному листу. Проверка данных работает на уровне листа, настройте её на нужных листах, и боковая панель будет подхватывать значения из активной ячейки независимо от листа.
После выбора значений ячейка показывает ошибку «Неверное значение».
Вы включили «Отклонять ввод» в настройках проверки данных. Вернитесь в Данные → Настроить проверку данных, выберите «Показывать предупреждение» вместо «Отклонять ввод». Если данные критичны, оставьте предупреждение, оно не блокирует запись скриптом.
Скрипт запрашивает доступ к Google-аккаунту, это безопасно?
Да. Разрешения нужны для
SpreadsheetApp.getActiveRange()(чтение данных ячейки) иSpreadsheetApp.getUi()(отображение меню и боковой панели). Скрипт работает только внутри вашей таблицы и не имеет доступа к другим файлам на Диске. Полный список разрешений виден в окне авторизации.
Какой скрипт множественного выбора поставить в свою таблицу
Описанное решение, минимальный работающий каркас. Два файла, ни одной внешней библиотеки, понятная логика. Для учёта расходов, тегирования задач и любых сценариев, где в одну ячейку нужно записать несколько значений из справочника, его хватает с головой.
Если вы работаете с Google Таблицами плотно, загляните в документацию Apps Script. Возможности выходят далеко за рамки чекбоксов: автоматическая отправка писем при изменении ячейки, генерация документов по шаблону, интеграция с Google Calendar. Начните с этого скрипта, а там, глядишь, и свои автоматизации напишете.



