如果单元格值较低,则颜色单元格为RED

时间:2013-06-28 02:50:39

标签: google-apps-script google-sheets gs-conditional-formatting

我需要一个Google电子表格的公式/脚本来执行此操作:

如果当前单元格值高于上面单元格中的值,则使当前单元格背景为红色(如果小于或等于然后保持白色),如下所示:=IF((C34>B34),"make background red","leave background white")只是不确定是否这样会工作,或者我需要一个更复杂的脚本。

我需要这个公式来处理224个单元格(28列和8行)。条件格式不会工作。

当天最多有20人在查看文档,只有一人正在编辑数据。脚本是否会减慢实时电子表格的工作速度,因为我需要一些非常复杂的公式来计算从主表到汇总表的数据。

我在这里和其他论坛搜索过,但每个人的公式都是独一无二的!

干杯

2 个答案:

答案 0 :(得分:2)

  

条件格式化不起作用。

可能不是在写的时候,但现在确实如此。

假设您的阵列在B34的左上角开始,清除格式并选择B35:AC41和格式,条件格式......,格式化单元格如果... 自定义公式并且:

=A35>A34

选择红色填充并完成

答案 1 :(得分:1)

您可以使用onEdit()触发器通过读取刚改变的单元格上方的值来进行更改,进行比较并适当着色。您必须在脚本中执行此操作,无法控制自定义函数的颜色。

您说“如果当前单元格值高于上面单元格中的值...”,但您的示例则为=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个观众。)