如果谷歌电子表格的同一列中的值重复,如何突出显示单元格?

Posted

技术标签:

【中文标题】如果谷歌电子表格的同一列中的值重复,如何突出显示单元格?【英文标题】:How to highlight cell if value duplicate in same column for google spreadsheet? 【发布时间】:2014-03-20 21:45:39 【问题描述】:

我正在寻找谷歌电子表格的公式 如果同一列中的值重复,则突出显示单元格

谁能帮我解答这个问题?

【问题讨论】:

【参考方案1】:

试试这个:

    选择整列 点击格式化 点击条件格式 点击添加另一条规则(或编辑现有/默认规则) 将单元格格式设置为:Custom formula is 将值设置为:=countif(A:A,A1)>1(或将 A 更改为您选择的列) 设置格式样式。 确保范围适用于您的列(例如,A1:A100)。 点击完成

将检查 A1:A100 单元格中写入的任何内容,如果存在重复项(出现多次),则会对其进行着色。

对于使用逗号 (,) 作为小数分隔符的语言环境,参数分隔符很可能是分号 (;)。也就是说,请尝试:=countif(A:A;A1)>1,而不是。

对于多列,请使用countifs

【讨论】:

从新的 Google 表格开始,您可以使用多列版本 COUNTIFS。如果重复项是更多列的组合=COUNTIFS(A:A; A1; B:B; B1)>1,则使用这样的方法 结尾 ; 导致我出现“无效公式”错误。只需删除它就可以了。还要注意:您指定为countif 的第二个参数的单元格应该是您选择的范围的第一个单元格。 它有效。但为什么?假设 A1 是方程的标准,这个公式不是将范围内的所有单元格都与 A1 进行比较吗? @mafonya,自定义公式是一个通用公式,必须将其读取为应用于第一个单元格。所有引用都将适用于所选范围内的每个单元格。例如,当检查单元格 B2 时,公式内部将变为 =countif(B:B,B2)>1。这允许在使用绝对与相对单元格引用时进行一些非常高级的格式化。 附带说明,如果您想将其应用于整个列,您可以使用公式 =countif(A:A,A:A)>1 这意味着它不仅适用于单元格 A1,而且适用于 A4 和 A8(如果它们相同(重复))。现在,A4 和 A8 都将被格式化。【参考方案2】:

突出显示重复项(在 C 列中):

=COUNTIF(C:C, C1) > 1

解释:这里的C1 不是指C 中的第一行。因为这个公式是通过条件格式规则评估的,相反,当检查公式是否适用时,C1 有效指当前正在评估的任何行以查看是否应应用突出显示。 (所以它更像是INDIRECT(C &ROW()),如果这对你来说意味着什么!)。本质上,在评估条件格式公式时,引用第 1 行的任何内容都会根据运行公式的行进行评估。 (是的,如果您使用 C2,那么您要求规则检查当前正在评估的行的紧下方的行的状态。

所以这就是说,计算C1(正在评估的当前单元格)中的任何内容在整个列C 中的出现次数,并且如果其中有超过1 个(即值有重复)然后:应用高亮显示(因为总体而言,公式的计算结果为 TRUE)。

仅突出显示第一个重复项:

=AND(COUNTIF(C:C, C1) > 1, COUNTIF(C$1:C1, C1) = 1)

说明:这仅在两个COUNTIFs 都是TRUE 时突出显示(它们出现在AND() 中)。

要评估的第一个术语(COUNTIF(C:C, C1) > 1)与第一个示例中的完全相同;只有当C1 中的任何内容有重复项时,它才是TRUE。 (请记住,C1 实际上是指正在检查的当前行以查看它是否应该突出显示)。

第二个术语 (COUNTIF(C$1:C1, C1) = 1) 看起来很相似,但有三个关键区别:

它不会搜索整个列 C(就像第一个列:C:C),而是从第一行开始搜索:C$1$ 强制它从字面上看1 行,而不是正在评估的任何行)。

然后它会在当前正在评估的行处停止搜索C1

最后是= 1

因此,只有在当前正在评估的行上方没有重复项时,它才会是 TRUE(这意味着它必须是重复项中的第一个)。

结合第一个术语(如果该行有重复项,则只有TRUE),这意味着只有第一个匹配项会被突出显示。

突出显示第二个及以后的重复项:

=AND(COUNTIF(C:C, C1) > 1, NOT(COUNTIF(C$1:C1, C1) = 1), COUNTIF(C1:C, C1) >= 1)

说明:第一个表达式与往常一样(TRUE,如果当前计算的行完全重复)。

第二项与最后一项完全相同,只是它被否定了:它周围有一个NOT()。所以它忽略了第一次出现。

最后,第三个词提取重复项 2、3 等。COUNTIF(C1:C, C1) >= 1 从当前评估的行开始搜索范围(C1:C 中的 C1)。然后它只评估TRUE(应用突出显示)如果在这个下面有一个或多个重复(包括这个):>= 1(它必须是>=而不仅仅是>,否则最后一个重复被忽略)。

【讨论】:

【参考方案3】:

@zolley 的答案是正确的。只需添加 Gif 和步骤供参考。

    转到菜单Format > Conditional formatting.. 查找Format cells if.. 在字段Custom formula is 中添加=countif(A:A,A1)>1 注意:将字母 A 更改为您自己的列。

【讨论】:

如何在突出显示重复项后按颜色过滤它们? @Faisal 仅适用于脚本或插件【参考方案4】:

我尝试了所有选项,但都没有成功。

只有谷歌应用脚​​本帮助了我。

来源:https://ctrlq.org/code/19649-find-duplicate-rows-in-google-sheets

在文档的顶部

1.- 转到 工具 > 脚本编辑器

2.- 设置脚本的名称

3.- 粘贴此代码:

function findDuplicates() 
  // List the columns you want to check by number (A = 1)
  var CHECK_COLUMNS = [1];

  // Get the active sheet and info about it
  var sourceSheet = SpreadsheetApp.getActiveSheet();
  var numRows = sourceSheet.getLastRow();
  var numCols = sourceSheet.getLastColumn();

  // Create the temporary working sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var newSheet = ss.insertSheet("FindDupes");

  // Copy the desired rows to the FindDupes sheet
  for (var i = 0; i < CHECK_COLUMNS.length; i++) 
    var sourceRange = sourceSheet.getRange(1,CHECK_COLUMNS[i],numRows);
    var nextCol = newSheet.getLastColumn() + 1;
    sourceRange.copyTo(newSheet.getRange(1,nextCol,numRows));
  

  // Find duplicates in the FindDupes sheet and color them in the main sheet
  var dupes = false;
  var data = newSheet.getDataRange().getValues();
  for (i = 1; i < data.length - 1; i++) 
    for (j = i+1; j < data.length; j++) 
      if  (data[i].join() == data[j].join()) 
        dupes = true;
        sourceSheet.getRange(i+1,1,1,numCols).setBackground("red");
        sourceSheet.getRange(j+1,1,1,numCols).setBackground("red");
      
    
  

  // Remove the FindDupes temporary sheet
  ss.deleteSheet(newSheet);

  // Alert the user with the results
  if (dupes) 
    Browser.msgBox("Possible duplicate(s) found and colored red.");
   else 
    Browser.msgBox("No duplicates found.");
  
;

4.- 保存并运行

在不到 3 秒的时间里,我的重复行被着色了。只需复制脚本即可。

如果您不了解 Google Apps 脚本,此链接可能会对您有所帮助:

https://zapier.com/learn/google-sheets/google-apps-script-tutorial/

https://developers.google.com/apps-script/overview

我希望这会有所帮助。

【讨论】:

能否修改这段代码,只用红色高亮列中的重复字段而不是整行?【参考方案5】:

从“文本包含”下拉菜单中选择“自定义公式为:”,然后写入:“=countif(A:A, A1) > 1”(不带引号)

我完全按照 zolley 的建议做了,但应该做些小修正:使用 “自定义公式是” 而不是 “文本包含”。 然后条件渲染就可以工作了。

【讨论】:

我没有对你投反对票(我今天才发现这个问题),但根据你的要求,这里是对你答案的评论。我认为公式中不需要分号。此外,我仍然在谷歌表格的条件格式面板中看到一个下拉菜单。至少,我点击选择选项,会出现一长串选项,我通常称之为下拉菜单。最初出现在下拉菜单中的选项通常是Text Contains,因此用户通常会单击该选项来访问下拉菜单。 感谢保罗,您的评论。也许我误解了:我理解“文本包含”(或“如果...格式化单元格”)有一个子下拉菜单“自定义公式是:”。此外,“文本包含”应该有一个相应的子字符串值,而不是“=countif(A:A,A1)>1;”。事实上,这是另一种方法。【参考方案6】:

虽然zolley's answer 非常适合这个问题,但这里有一个适用于任何范围的更通用的解决方案,以及解释:

    =COUNTIF($A$1:$C$50, INDIRECT(ADDRESS(ROW(), COLUMN(), 4))) > 1

请注意,在此示例中,我将使用范围 A1:C50。 第一个参数 ($A$1:$C$50) 应替换为您要突出显示重复项的范围!


突出显示重复项:

    选择需要重复标记的整个范围。 在菜单上:Format > Conditional formatting...Apply to range 下,选择应应用规则的范围。 在Format cells if 的下拉列表中选择Custom formula is。 在文本框中插入给定的公式,调整范围以匹配步骤 (3)。

为什么会起作用?

COUNTIF(range, criterion),会将range 中的每个单元格与criterion 进行比较,其处理方式与公式类似。如果没有提供特殊运算符,它将范围内的每个单元格与给定单元格进行比较,并返回找到的与规则匹配的单元格数(在本例中为比较)。我们使用固定范围(带有$ 符号),以便我们始终查看完整范围。

第二个块,INDIRECT(ADDRESS(ROW(), COLUMN(), 4)),将返回当前单元格的内容。如果将它放在单元格内,文档会抱怨循环依赖,但在这种情况下,公式会像在单元格中一样被评估,而不需要更改。

ROW()COLUMN() 将分别返回给定单元格的行number 和列number。如果不提供参数,则返回当前单元格(这是从 1 开始的,例如,B3 将返回 3 代表 ROW(),返回 2 代表 COLUMN())。

然后我们使用:ADDRESS(row, column, [absolute_relative_mode]) 将数字行和列转换为单元格引用(如 B3。请记住,当我们在单元格的上下文中时,我们不知道它的地址或内容,我们需要内容以进行比较)。第三个参数负责格式化,4 返回格式化 INDIRECT() 喜欢。

INDIRECT(),将获取一个单元格reference 并返回其内容。在这种情况下,当前单元格的内容。然后回到开头,COUNTIF() 将针对我们的单元格测试范围内的每个单元格,并返回计数。

最后一步是让我们的公式返回一个布尔值,将其设为逻辑表达式:COUNTIF(...) &gt; 1。使用&gt; 1 是因为我们知道至少有一个单元格与我们的单元格相同。那是我们的单元格,它在范围内,因此将与自身进行比较。因此,要表示重复,我们需要找到 2 个或更多与我们匹配的单元格。


来源:

文档编辑器帮助:COUNTIF() 文档编辑器帮助:INDIRECT() 文档编辑器帮助:ADDRESS() 文档编辑器帮助:ROW() 文档编辑器帮助:COLUMN()

【讨论】:

遗憾的是这对我不起作用。尽管有很多重复项,但它根本无法突出显示任何内容。不知道为什么,这听起来是个不错的解决方案。 这对我有用,但也会突出显示空白单元格。有没有办法排除空白? @Amanda - 是的,有点创造力,这是可能的。我是 AFK 一周,但在一周内接我。半,我很乐意提供帮助。这个想法是创建一个 AND 语句(使用*)和另一个检查,所以沿着((COUNTIF(...))*(NOT(ISBLANK(INDIRECT(...current cell...))))) 的行。这是我在手机上能做的最好的事情。 :) 这正是所需的解决方案。这就像一个 HASHMAP 来识别重复项。 作品迷人,感谢@Selfish!节省了我的时间。注意:唯一要更改的内容必须是 $A$1:$C$50 - 根据有问题的列。与 zolley 相比,我更喜欢这种更通用的方法。

以上是关于如果谷歌电子表格的同一列中的值重复,如何突出显示单元格?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据列中的值自动填充谷歌表格中的数据

突出显示 A:B 列中的值相同但 C 列中的值不同的行

如何突出显示数据框的两个不同列中的唯一数据值?

如何在谷歌电子表格图中编辑图例标签?

根据谷歌电子表格中的行和列条件计算值

Excel:如果在另一列中发现重复的单元格值,则突出显示绿色