如何根据列中的重复值为每个值设置不同颜色的单元格颜色
How to set cell color based in duplicated value in column with different colours for each values
在 Google 电子表格文档中,我需要根据列中的重复值设置单元格颜色,每个重复值 颜色不同 。颜色应该设置为 'random' 这样所有的颜色都会不同。
应用条件后,单元格的颜色应如下所示:https://docs.google.com/spreadsheets/d/1YuUjg_PqD53AoTrxgvnEHYwZ_disqvNKDMmp5dRYq4I/edit?usp=sharing
这个问题与这个How to highlight cell if value duplicate in same column for google spreadsheet?类似,但不一样,因为我需要为每个重复值提供不同的颜色
我想我可能需要一个脚本来完成这项工作?我不认为这可以通过 'conditional formatting' 规则功能来完成。
更新:
Player0 发布的条件非常有效。但问题是在示例中我只是发布了几个单元格。在真实的电子表格中,我有数百个不时变化的值。然后用这种方法我需要创建很多条件规则。我需要使用单个公式动态地执行此操作。它应该是一个单一的 formula/script 应用于 A 列,它为每个值巧合生成随机颜色...
黄色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=1)*
(COUNTIF(A:A; A1)>1)
蓝色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=2)*
(COUNTIF(A:A; A1)>1)
粉色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=3)*
(COUNTIF(A:A; A1)>1)
绿色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=4)*
(COUNTIF(A:A; A1)>1)
红色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=5)*
(COUNTIF(A:A; A1)>1)
橙色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=6)*
(COUNTIF(A:A; A1)>1)
这是一个有效的脚本:
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 列中查找重复项,但如果需要将其更改为另一列,您也可以更改它。
试试吧,有什么问题随时问我。祝你好运!
*我编辑了我之前的答案,因为它没有考虑出现超过两次的值。
*我再次编辑以避免空单元格。
在 Google 电子表格文档中,我需要根据列中的重复值设置单元格颜色,每个重复值 颜色不同 。颜色应该设置为 'random' 这样所有的颜色都会不同。
应用条件后,单元格的颜色应如下所示:https://docs.google.com/spreadsheets/d/1YuUjg_PqD53AoTrxgvnEHYwZ_disqvNKDMmp5dRYq4I/edit?usp=sharing
这个问题与这个How to highlight cell if value duplicate in same column for google spreadsheet?类似,但不一样,因为我需要为每个重复值提供不同的颜色
我想我可能需要一个脚本来完成这项工作?我不认为这可以通过 'conditional formatting' 规则功能来完成。
更新: Player0 发布的条件非常有效。但问题是在示例中我只是发布了几个单元格。在真实的电子表格中,我有数百个不时变化的值。然后用这种方法我需要创建很多条件规则。我需要使用单个公式动态地执行此操作。它应该是一个单一的 formula/script 应用于 A 列,它为每个值巧合生成随机颜色...
黄色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=1)*
(COUNTIF(A:A; A1)>1)
蓝色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=2)*
(COUNTIF(A:A; A1)>1)
粉色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=3)*
(COUNTIF(A:A; A1)>1)
绿色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=4)*
(COUNTIF(A:A; A1)>1)
红色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=5)*
(COUNTIF(A:A; A1)>1)
橙色:
=(ARRAYFORMULA(VLOOKUP(A1; {UNIQUE(A:A)\
ROW(INDIRECT("A1:A"&COUNTUNIQUE(A:A)+1))}; 2; 0))=6)*
(COUNTIF(A:A; A1)>1)
这是一个有效的脚本:
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 列中查找重复项,但如果需要将其更改为另一列,您也可以更改它。
试试吧,有什么问题随时问我。祝你好运!
*我编辑了我之前的答案,因为它没有考虑出现超过两次的值。
*我再次编辑以避免空单元格。