当前位置: 首页 > 知识库问答 >
问题:

如何设置单元格颜色基于重复的值在列与不同的颜色为每个值

公冶元青
2023-03-14

在谷歌电子表格文档中,我需要在列中设置基于重复值的单元格颜色,每个重复值使用不同的颜色。颜色应设置为“随机”,以便所有颜色都不同。

施加条件后,电池的颜色应如下所示:https://docs.google.com/spreadsheets/d/1YuUjg_PqD53AoTrxgvnEHYwZ_disqvNKDMmp5dRYq4I/edit?usp=sharing

这个问题和这个类似,如果谷歌电子表格的同一列中的值重复,如何突出显示单元格?但不一样,因为我需要为每个复制值提供不同的颜色

我想我可能需要一个剧本来完成这个?我不认为这可以通过条件格式化规则功能来完成。

更新:Player0发布的条件很棒。但问题是,在这个例子中,我只是发布了几个单元格。在真实的电子表格中,我有数百个不时变化的值。然后用这种方法,我将需要创建许多条件规则。我需要用一个公式动态地做这件事。它应该是一个单一的公式/脚本,应用于为每个值一致生成随机颜色的列A...

共有2个答案

松鸣
2023-03-14

黄色的:

=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A$1:A)\ 
  ROW(INDIRECT("A1:A"&COUNTUNIQUE(A$1:A)+1))}; 2; 0))=1)*
 (COUNTIF(A:A; A1)>1)

蓝色:

=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A$1:A)\ 
  ROW(INDIRECT("A1:A"&COUNTUNIQUE(A$1:A)+1))}; 2; 0))=2)*
 (COUNTIF(A:A; A1)>1)

粉红色:

=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A$1:A)\ 
  ROW(INDIRECT("A1:A"&COUNTUNIQUE(A$1:A)+1))}; 2; 0))=3)*
 (COUNTIF(A:A; A1)>1)

绿色:

=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A$1:A)\ 
  ROW(INDIRECT("A1:A"&COUNTUNIQUE(A$1:A)+1))}; 2; 0))=4)*
 (COUNTIF(A:A; A1)>1)

红色:

=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A$1:A)\ 
  ROW(INDIRECT("A1:A"&COUNTUNIQUE(A$1:A)+1))}; 2; 0))=5)*
 (COUNTIF(A:A; A1)>1)

橙色:

=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A$1:A)\ 
  ROW(INDIRECT("A1:A"&COUNTUNIQUE(A$1:A)+1))}; 2; 0))=6)*
 (COUNTIF(A:A; A1)>1)
施誉
2023-03-14

下面是一个工作的脚本

function colorDuplicates() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lr = ss.getLastRow();
  var column = 1
  ss.getRange(2, column, lr).setBackground(null);
  var color = ["#EA9999","#F9CB9C","#FFE599","#B6D7A8","#A2C4C9","#9FC5E8","#B4A7D6","#D5A6BD","#CCCCCC","#B45F06","#666666","#FF0000","#FF9900","#FFFF00","#00FF00","#00FFFF"];
  var c = 0;
  var checkcolor = false;
  for (var i = 2; i < lr+1;i++){
    if (checkcolor == true) {
      c++;
      checkcolor = false;
    }
    var a = ss.getRange(i, column).getValue();
    if (a == "") {continue;}
    var cellcolor = ss.getRange(i, column).getBackground();
    if (cellcolor != "#ffffff") {continue;}
    for (var j = i+1;j< lr+1;j++){
      var b = ss.getRange(j, column).getValue();
      if (a != b) {continue;}
      var cellcolor = ss.getRange(j, column).getBackground();
      if (cellcolor != "#ffffff") {continue;}
      ss.getRange(i, column).setBackground(color[c]);
      ss.getRange(j, column).setBackground(color[c]);
      checkcolor = true;
    }
  }
}



function colorDuplicates2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lr = getLastRowSpecial(ss.getRange("A:A").getValues());
  var lc = ss.getLastColumn();
  ss.getRange(2, 1, lr).setBackground(null);
  ss.insertColumnAfter(lc);
  ss.getRange(1, lc+1).setFormula("=FILTER(UNIQUE(A2:A);UNIQUE(A2:A)<>\"\")"); // Change the ";" for a "," if you are in the us
  var numValues = getLastRowSpecial(ss.getRange(1, lc+1, lr).getValues());
  var values = new Array(36);
  for (var a = 1;a<numValues+1;a++){
    values[a] = String(ss.getRange(a, lc+1).getValue());
  }

  var color = ["#980000", "#ff0000", "#ff9900", "#ffff00", "#00ff00", "#00ffff", "#4a86e8", "#0000ff", "#9900ff", "#ff00ff", "#e6b8af", "#f4cccc", "#fce5cd", "#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#a4c2f4", "#9fc5e8", "#b4a7d6", "#d5a6bd", "#cc4125", "#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6d9eeb", "#6fa8dc", "#8e7cc3", "#c27ba0", "#a61c00", "#cc0000", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3c78d8", "#3d85c6", "#674ea7", "#a64d79", "#85200c", "#990000"];

  for (var i = 2;i<lr+1;i++){
    switch (String(ss.getRange(i, 1).getValue())) {
      case values[1]:
        ss.getRange(i, 1).setBackground(color[1]);
        break;
      case values[2]:
        ss.getRange(i, 1).setBackground(color[2]);
        break;
      case values[3]:
        ss.getRange(i, 1).setBackground(color[3]);
        break;
      case values[4]:
        ss.getRange(i, 1).setBackground(color[4]);
        break;
      case values[5]:
        ss.getRange(i, 1).setBackground(color[5]);
        break;
      case values[6]:
        ss.getRange(i, 1).setBackground(color[6]);
        break;
      case values[7]:
        ss.getRange(i, 1).setBackground(color[7]);
        break;
      case values[8]:
        ss.getRange(i, 1).setBackground(color[8]);
        break;
      case values[9]:
        ss.getRange(i, 1).setBackground(color[9]);
        break;
      case values[10]:
        ss.getRange(i, 1).setBackground(color[10]);
        break;
      case values[11]:
        ss.getRange(i, 1).setBackground(color[11]);
        break;
      case values[12]:
        ss.getRange(i, 1).setBackground(color[12]);
        break;
      case values[13]:
        ss.getRange(i, 1).setBackground(color[13]);
        break;
      case values[14]:
        ss.getRange(i, 1).setBackground(color[14]);
        break;
      case values[15]:
        ss.getRange(i, 1).setBackground(color[15]);
        break;
      case values[16]:
        ss.getRange(i, 1).setBackground(color[16]);
        break;
      case values[17]:
        ss.getRange(i, 1).setBackground(color[17]);
        break;
      case values[18]:
        ss.getRange(i, 1).setBackground(color[18]);
        break;
      case values[19]:
        ss.getRange(i, 1).setBackground(color[19]);
        break;
      case values[20]:
        ss.getRange(i, 1).setBackground(color[20]);
        break;
      case values[21]:
        ss.getRange(i, 1).setBackground(color[21]);
        break;
      case values[22]:
        ss.getRange(i, 1).setBackground(color[22]);
        break;
      case values[23]:
        ss.getRange(i, 1).setBackground(color[23]);
        break;
      case values[24]:
        ss.getRange(i, 1).setBackground(color[24]);
        break;
      case values[25]:
        ss.getRange(i, 1).setBackground(color[25]);
        break;
      case values[26]:
        ss.getRange(i, 1).setBackground(color[26]);
        break;
      case values[27]:
        ss.getRange(i, 1).setBackground(color[27]);
        break;
      case values[28]:
        ss.getRange(i, 1).setBackground(color[28]);
        break;
      case values[29]:
        ss.getRange(i, 1).setBackground(color[29]);
        break;
      case values[30]:
        ss.getRange(i, 1).setBackground(color[30]);
        break;
      case values[31]:
        ss.getRange(i, 1).setBackground(color[31]);
        break;
      case values[32]:
        ss.getRange(i, 1).setBackground(color[32]);
        break;
      case values[33]:
        ss.getRange(i, 1).setBackground(color[33]);
        break;
      case values[34]:
        ss.getRange(i, 1).setBackground(color[34]);
        break;
      case values[35]:
        ss.getRange(i, 1).setBackground(color[35]);
        break;
      case values[36]:
        ss.getRange(i, 1).setBackground(color[36]);
        break;

    }
  }
  ss.deleteColumn(lc+1);
}



function getLastRowSpecial(range){
  var rowNum = 0;
  var blank = false;
  for(var row = 0; row < range.length; row++){

    if(range[row][0] === "" && !blank){
      rowNum = row;
      blank = true;
    }else if(range[row][0] !== ""){
      blank = false;
    };
  };
  return rowNum;
}

它只有16种颜色,在那之后找到的副本会留空,但是你可以根据需要添加更多的颜色。

它用于在列A中查找重复项,但如果需要将其更改为另一列,也可以对其进行更改。

试试看,随便问我什么。祝你好运

*我编辑了我之前的答案,因为它没有考虑出现两次以上的值。

*我再次编辑,以避免空单元格。

 类似资料:
  • 我使用了如下内容:我为CellStyle设置了一个全局变量,并尝试为第4列中的所有单元格填充颜色。...... 顺便说一下,我使用HSSFWorkbook和HSSFSheet进行报告。 这样,它只是填充整个薄片,结果所有的细胞得到填充的石灰颜色!

  • 我有一个servlet,它接收一组数据,进行处理,并根据表单提交将其写入excel文件或文本页面。在处理Excel时,所有的处理都在使用Apache POI的相应模型中进行。我正在尝试修改它,以便它根据所包含的数据对行进行颜色编码,但是,在将颜色应用于行之后,当我将工作簿写入文件输出流时,颜色不存在。我正在将数据处理成excel文件,如下所示: MCVE公司 我仍然得到excel文件,但格式不存在

  • 我已经研究了如何更改Angulal-Chart.js的颜色,但它涉及整个(数据集)的颜色,而不是特定的条。 我要寻找的是一种在条形图中为每个条形应用不同颜色的方法;从图表到角度。 所以,我有一个条形图: 使用以下角度代码(当然是在控制器中) 其中将返回随机颜色。 现在,字段将此颜色应用于所有条: 当我真的想为每个酒吧不同的颜色: 柱塞

  • 因此,我有一段代码,它以我需要的格式愉快地显示了一个图形: 我想让图表中的一个条显示为不同于上面代码中设置的颜色。

  • 我有一个图标svg喜欢: 它显示很好,但我想在某些情况下改变颜色(如悬停或选择) 我用过: 它不会改变颜色。任何帮助都将不胜感激。

  • 假设我有三个数据集: 我可以分散绘制这个: 10套怎么做得到? 我搜索了这个,可以找到任何关于我所问问题的参考资料。 编辑:澄清(希望)我的问题 如果我多次调用散点,我只能在每个散点上设置相同的颜色。此外,我知道我可以手动设置颜色阵列,但我相信有更好的方法来做到这一点。我的问题是,“我如何自动分散绘制我的几个数据集,每个数据集都有不同的颜色。 如果有帮助,我可以很容易地为每个数据集分配一个唯一的数