Google sheet 如果另一个 sheet 中的同一单元格不为空,则条件格式设置为单元格颜色

Google sheets conditional formatting to colour cell if the same cell in another sheet is not empty

我有 2 个 sheets AB。如果 sheet B 中完全相同的单元格不为空,我希望 sheet A 为单元格着色。例如,如果单元格 A1 in sheet B 有一个字符串,则单元格 A1 in sheet A 将被着色。

假设我想比较大范围,我应该怎么做?

示例:https://docs.google.com/spreadsheets/d/1P3Ob_mclpXWmILfKwD4R6JN2wAYPUcNZlmtF9LxilV0/edit?usp=sharing

sheet B 中的 A2:C2D5K2 单元格不为空。因此 sheet A 中的相应单元格将被着色为红色。

解释:

不熟悉如何使用自定义条件格式公式完成此操作,因此请等待其他人帮助您。

不过,我可以为您提供 Google Apps 脚本解决方案。

以下脚本将检查 sheet B 中的数据范围,并构建一个颜色数组。如果 values 数组中的值为空,则此数组的元素将具有白色十六进制颜色 #ffffff",如果值不为空,则为红色 #ff0000

然后根据这个颜色数组一次性给sheet A上色。即使对于大范围,该脚本也相对较快。

解决方案/解决方法:

不要忘记将 "sheet A""sheet B" 调整为您的工作表名称。

function colorCells(){
  const ss = SpreadsheetApp.getActive();
  const sheetToColor = ss.getSheetByName("sheet A");
  const sheetToCheck = ss.getSheetByName("sheet B");  
  const bValues = sheetToCheck.getDataRange().getValues();
  const aColors=bValues.map(r=>r.map(v=>v==''?"#ffffff":"#ff0000"));
  sheetToColor.getRange(1,1,sheetToCheck.getLastRow(),sheetToCheck.getLastColumn()).
  setBackgrounds(aColors);
}

如何使用:

点击 Tools => Scipt editor,复制、粘贴并保存上述代码,然后点击播放按钮执行。

如果您希望它“自动”工作,那么您可以设置一个时间触发器,每隔 n 分钟为您执行一次该功能。


红利代码:

您可以执行相同的操作,但使用的是一种更具用户交互性的方式。再次,将以下脚本复制、粘贴并保存到脚本编辑器,但这次不要执行它,因为它可以自行运行。

以下脚本将在 用户sheet B 中的同一单元格进行编辑时更改 sheet A 中单元格的颜色:

function onEdit(e) {  
  // adjust this to your needs:
  const sheetToColorName = "sheet A";
  const sheetToCheckName = "sheet B";
  const rng = e.range;
  const cell = rng.getA1Notation();      
  if (rng.getSheet().getName()==sheetToCheckName){
    const sheetToColor = e.source.getSheetByName(sheetToColorName);
    if(rng.getValue()!=''){        
        sheetToColor.getRange(cell).setBackground("#ff0000"); //red     
    }
    else {
        sheetToColor.getRange(cell).setBackground("#ffffff"); //white
    }    
  }
}

您可以使用以下公式作为条件格式规则

=NOT(ISBLANK(INDIRECT("B!"&address(row(),column()))))

A!A2 中的公式 只是向 展示 sheet B 中发生的事情)