Цветная ячейка RED, если ячейка выше значения ниже

Мне нужна формула / script для электронной таблицы Google, которая сделает это:

Если текущее значение ячейки выше, чем значение в ячейке выше, сделайте текущий фон ячейки красным (если оно меньше или равно, то оставьте белый), примерно так: =IF((C34>B34),"make background red","leave background white") просто не уверен, что это будет работать или мне нужен более сложный script.

Мне нужна эта формула для работы через 224 ячейки (28 столбцов и 8 строк). Условное форматирование не работает.

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

Я искал здесь и другие форумы, но все формулы уникальны!

Приветствия

Ответ 1

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

Вы сказали: "Если текущее значение ячейки выше, чем значение в ячейке выше...", но ваш пример тогда имел =IF((C34>B34)..., который находится "рядом", а не "выше". Этот код использует .offset(-1,0) для "выше" и гарантирует, что он не будет возиться с строкой выше строки 1 - если вы имели в виду "рядом", вы хотите изменить это.

function onEdit(event)
{
  if (isNaN(event.value)) return;        // If change was not a number, exit
  var changedCell = event.range;
  if (changedCell.getRow() == 1) return; // Nothing to do in Row 1
  var cellAbove = changedCell.offset(-1, 0);
  var background = 'white';              // Assume white background
  // Is the changed value greater than the value in the cell above?
  if ( parseFloat(event.value) > parseFloat(cellAbove.getValue()) ) {
    background = 'red';                  // Yes, so red background
  }
  changedCell.setBackground(background);
}

Производительность WRT, функция триггера немного замедлит работу, но я подозреваю, что вы увидите большее отставание из-за большого количества нескольких зрителей, поскольку google-docs делает это, чтобы синхронизировать все эти разрозненные представления. (Я видел листы с < 100 ячеек, и никакие формулы не справились с тем, чтобы не отставать от < 10 зрителей.)

Ответ 2

Условное форматирование не работает.

Вероятно, не в то время, когда это было написано, но сейчас.

Предполагая, что ваш массив начинается в B34 для его верхнего левого, очистить форматирование и выбрать B35: AC41 и Format, Условное форматирование..., Форматировать ячейки, если... Пользовательская формула и:

=A35>A34

выберите красную заливку и Done.