Ответ 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 зрителей.)