【问题标题】:How to highlight cells red in a range if the same data exists in another range如果相同的数据存在于另一个范围中,如何突出显示一个范围中的单元格红色
【发布时间】:2021-04-23 14:19:55
【问题描述】:

我正在处理一张名为“团队设置”的工作表

我有一个单元格范围内的姓名列表:B29:E39,这是我在“假期”作为员工放入姓名的范围

然后我将名称(部署人员)放入范围内的不同角色中:B2:S27

我想突出显示 B2:S27 范围内的任何单元格,其中值也存在于 B29:E39 中,以向我表明我已经部署了一名“正在度假”的员工

这是否可以通过脚本或条件格式来实现,如果有人能帮助我解决这个问题,我将非常感激。

【问题讨论】:

    标签: google-apps-script google-sheets duplicates matching conditional-formatting


    【解决方案1】:

    通过脚本执行此操作相当简单。请参阅下面的脚本:

    代码:

    function onEdit(e) {
      var sheet = e.source.getActiveSheet();
    
      // Define ranges to only continue the function when edited cell is in there
      // This is to prevent unnecessary execution time as we have quotas
      var dataRange = { // B2:S27
        top : 2,
        bottom : 27,
        left : 2,
        right : 19
      };
      var holidayRange = { // B29:E39
        top : 29,
        bottom : 39,
        left : 2,
        right : 5
      }
      // if edited cell is in data or holiday range
      if(isInRange(e.range, dataRange) || isInRange(e.range, holidayRange)) {
        var data = sheet.getRange("B2:S27").getValues();
        // To filter only non blank cells, add filter(Boolean)
        var holiday = sheet.getRange("B29:E39").getValues().flat().filter(Boolean);
    
        data.forEach(function (row, i) {
          row.forEach(function (cell, j) {
            if (holiday.includes(cell))
              sheet.getRange(i + 2, j + 2).setBackground("red");
            // set to white if it turns out the value is now not found
            else
              sheet.getRange(i + 2, j + 2).setBackground("white");
          });
        });
      }
    }
    
    function isInRange(cell, range) {
      var startRow = range.top;
      var endRow = range.bottom;
      var startColumn = range.left;
      var endColumn = range.right;
      return cell.getRow() >= startRow && cell.getRow() <= endRow &&
             cell.getColumn() >= startColumn && cell.getColumn() <= endColumn;
    }
    
    

    输出:

    参考:

    【讨论】:

    • 非常感谢!使其完美的唯一方法是忽略 B29:E39 中的空白单元格。如果我没有在假期用员工填写该范围,则会留下空白。请问您可以为此添加一行吗?
    • 另外,我希望将脚本的触发器修改为 OnEdit。那会很简单吗?编辑:我已经修改为现在触发 onEdit(e)。只需忽略 B29:E39 中的空格即可。
    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2021-07-12
    • 2013-12-27
    相关资源
    最近更新 更多