【问题标题】:Google sheets conditional formatting to colour cell if the same cell in another sheet is not empty如果另一个工作表中的相同单元格不为空,Google 工作表条件格式会为单元格着色
【发布时间】:2021-04-12 00:50:36
【问题描述】:

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

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

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

工作表 B 中的单元格 A2:C2D5K2 不为空。因此,工作表 A 中的相应单元格将变为红色。

【问题讨论】:

标签: google-sheets google-sheets-formula conditional-formatting


【解决方案1】:

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

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

A!A2 中的公式是为了只是显示您在工作表 B 中发生了什么)

【讨论】:

  • 非常感谢,它有效。但是我在原始文档中意识到,单元格被合并了。示例:docs.google.com/spreadsheets/d/... 因此,在工作表 B 中,单元格 A2:D2 被合并,但工作表仅将单元格 A2 填入,因此在工作表 A 中,只有单元格 A2 是彩色的。我怎样才能使它将合并的单元格识别为已填充?
  • “非常感谢,它可以工作。但是......我怎样才能让它将合并的单元格识别为已填充?” 我认为你不能使用合并的单元格实现它。甚至没有脚本。无论如何,既然您的原始问题得到了回答,您应该重新接受答案。正如您从赞成票中看到的那样,它对其他人非常有用。至于合并的单元格——因为它需要一个完全不同的解决方案,正如马里奥斯所指出的那样——你也应该发布一个引用这个问题的新问题。
【解决方案2】:

解释:

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

不过,我可以为您提供 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
    }    
  }
}

【讨论】:

  • 非常感谢!但它返回错误“TypeError:无法读取属性'getRange' of null”
  • @Portato 就像我在解释我的答案时所说的那样。确保您的工作表具有准确的名称 sheet Asheet B。没有多余的空格,没有不同的大小写字母。必须完全一样。如您所见,名称之间有一个空格。但无论如何,如果您使用的是合并单元格,那么我认为这个解决方案将不起作用,但您可以尝试。
猜你喜欢
  • 2019-07-02
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
相关资源
最近更新 更多