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


Answers:


473

试试这个:

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

将检查A1:A100单元格中写入的所有内容,如果有重复项(发生多次),则将其上色。

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

对于多列,请使用countifs


50
从新版Google表格开始,您可以使用多列版本COUNTIFS。如果重复项是更多列的组合,则使用这种方式=COUNTIFS(A:A; A1; B:B; B1)>1
Christiaan Westerbeek 2014年

6
结尾;对我来说是一个“无效的公式”错误。只是删除它就可以了。还要注意:指定为的第二个参数的countif单元格应该是所选范围的第一个单元格。
edelans 2015年

11
有用。但为什么?假设A1是方程式的标准,此公式是否会将范围内的所有像元都与A1进行比较?
mafonya 2015年

9
@mafonya,自定义公式是通用公式,在应用于第一个单元格时必须阅读。所有参考将适应所选范围内的每个单元。因此,例如,当检查单元格B2时,公式将在内部变为=countif(B:B,B2)>1。当使用绝对单元格引用和相对单元格引用时,这可以使用户进行一些相当高级的格式化。
asoundmove 2015年

14
附带说明一下,如果要将其应用于整个列,则可以使用公式= countif(A:A,A:A)> 1,这意味着它不仅适用于单元格A1,而且A4和A8是否相同(重复)。现在,A4和A8都将被格式化。
BBking

68

尽管zolley的答案非常适合该问题,但这是适用于任何范围的更通用解决方案,并附有解释:

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

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


突出显示重复项:

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

为什么行得通?

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

第二个块,INDIRECT(ADDRESS(ROW(), COLUMN(), 4))将返回当前单元格的内容。如果将其放置在单元格中,则文档将要求循环依赖,但在这种情况下,公式的计算方式就像在单元格中一样,而无需更改它。

ROW()并且COLUMN()将返回的行和列分别给定的细胞。如果未提供任何参数,则将返回当前单元格(例如,基于1的单元格B3将返回3,对于ROW()2 将返回2 COLUMN())。

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

INDIRECT(),将获取单元格引用并返回其内容。在这种情况下,当前单元格的内容。然后重新开始,COUNTIF()将对照我们的范围测试范围中的每个单元,然后返回计数。

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


资料来源:


4
不幸的是,这对我不起作用。尽管有很多重复项,但它根本无法突出显示任何内容。不知道为什么,这听起来像是一个不错的解决方案。
JVC

这对我有用,但也突出显示空白单元格。有没有办法排除空格?
gillespieza

1
@Amanda-是的,有点创意,这是可能的。我本周为AFK,但一周后就赶上了我,我很乐意为您提供帮助。这个想法是创建一个AND语句(使用*)和另一个检查,因此遵循的思路((COUNTIF(...))*(NOT(ISBLANK(INDIRECT(...current cell...)))))。那是我在移动设备上能做的最好的事情。:)
自私的2017年

2
正是这是所需的解决方案。这就像HASHMAP一样,用于识别重复项。
AKh

1
作品迷人,谢谢@Selfish!节省了我的时间。注意:必须更改的唯一内容$A$1:$C$50-与所讨论的列相对应。我比zolley更喜欢这种更通用的方法。
胆大的

28

@zolley的答案是正确的。只需添加一个Gif和步骤作为参考。

  1. 转到菜单 Format > Conditional formatting..
  2. Format cells if..
  3. 新增=countif(A:A,A1)>1栏位Custom formula is
    • 注意:A用您自己的列更改字母。

在此处输入图片说明


2
突出显示重复项后如何按颜色过滤它们?
Faisal

@Faisal仅适用于脚本或插件
player0

27

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

我确实按照zolley的建议进行了操作,但是应该做一些小的更正:使用“自定义公式为”而不是“文本包含”。然后条件渲染将起作用。

菜单截图


1
我没有投票给你(我今天才发现这个问题),但是这里是根据你的要求对你的答案的评论。我认为公式中不需要分号。另外,我仍然在Google表格中的条件格式面板中看到一个下拉菜单。至少,我单击选择选项,然后出现一长套选项,通常将其称为下拉菜单。最初出现在Text Contains下拉菜单中的选项通常是,因此用户通常会单击该选项以访问下拉菜单。
保罗·德·巴罗斯

谢谢保罗的评论。也许我误会了:我了解“文本包含”(或“如果...则格式化单元格”)有一个子下拉菜单“自定义公式为:”。此外,“文本包含”应具有相应的子字符串值,而不是“ = countif(A:A,A1)> 1;”。实际上,这是另一种方法。
Shurik

11

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

=COUNTIF(C:C, C1) > 1

说明:C1此处不引用C中的第一行。由于此公式是通过条件格式规则求值的,因此,当检查该公式以查看其是否适用时,C1有效引用当前正在求值的任何行看看是否应该应用突出显示。(因此,更像是INDIRECT(C &ROW()),如果这对您来说意味着什么!)。本质上,在评估条件格式公式时,将参照针对该公式运行的行评估引用第1行的所有内容。(是的,如果您使用C2,则要求该规则检查当前正在评估的行正下方的行的状态。

所以这就是说,C1要计算整个列中(当前要评估的当前单元格)中所有内容的C出现次数,如果它们中的一个以上(即值重复),则:应用突出显示(因为公式,总体计算为TRUE)。

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

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

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

要评估的第一个术语(COUNTIF(C:C, C1) > 1)与第一个示例完全相同;这是TRUE只有在无论是在C1有重复。(请记住,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中的C1:C)开始搜索范围。然后,它仅求值TRUE(应用突出显示)在此副本(包括该副本)下面是否存在一个或多个副本:(>= 1>=不仅仅可以>以其他方式忽略最后一个副本)。


3

我尝试了所有选项,但没有一个起作用。

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

来源: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

我希望这有帮助。


可以修改此代码以仅在红色列而不是整行中突出显示重复的字段吗?
Amr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.