@Smukke

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

Есть таблица в Google Sheets с выпадающим списком и автозаменой цвета в зависимости от значение списка
Условно, если значение «Выкуплено» красит строку в зеленый, «Отказ» - в красный.
Теперь есть задача с сортировкой этих строк по цветам в чем и прошу помочь.
Есть базовые строки - Белые они всегда должны оставаться в топе, Зеленые всегда быть после, а в конце красные. Хочется довести это до автоматизма, что бы при смене статуса в выпадающем списке строка переносилась в определенную цветовую категорию.
Не знаю, как даже лучше решить это, думал добавить столбец в которое будет вводится значение в зависимости от текста в выпадающем списке: 1, 2, 3… и делать сортировку по этим цифрам, но видимо до конца формулу не смог сделать, что бы все правильно работало.

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

63d16af0931b8916767789.jpeg
  • Вопрос задан
  • 498 просмотров
Решения вопроса 1
ProgrammerForever
@ProgrammerForever Куратор тега Google Apps Script
Учитель, автоэлектрик, программист, музыкант
Не получится формулами сортировать на месте, да и такой вариант - перемешивание статических и динамических данных, что в корне неверно. Это можно сделать скриптом - организовать onEdit() и там проверять значение и пересортировывать весь лист. Но я бы не советовал такой вариант - onEdit может пропускать вызовы, если вызывать его часто. Да и медленно это будет всё, если данных много. Но пробуйте, может быть то что получится и устроит вас.
Заготовка для onEdit:
const whiteListSheetNames = [`Лист1`,`Лист2`];
const whiteListRangeNames = [`H1`, `H2`];

function onEditTrigger(e) {    // установить триггер на "Редактирование". Простой onEdit имеет меньше прав
    let sheet = e.source.getActiveSheet();
    let address = e.range.getA1Notation().toUpperCase();
    let row = e.range.getRow();
    let col = e.range.getColumn();
    let newValue =  e.value;
    let oldValue =  e.oldValue;

    if ((whiteListSheetNames.includes(sheet.getName())) && (whiteListRangeNames.includes(address))) { // Проверка по вкусу
	// сортировка
	};
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы