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

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

谁能帮我解答这个问题?

【问题讨论】:

    标签: google-sheets gs-conditional-formatting


    【解决方案1】:

    试试这个:

    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

    【讨论】:

    • 从新的 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 和步骤供参考。

      1. 转到菜单Format > Conditional formatting..
      2. 查找Format cells if..
      3. 在字段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) 应替换为您要突出显示重复项的范围!


      突出显示重复项:

      1. 选择需要重复标记的整个范围。
      2. 在菜单上:Format > Conditional formatting...
      3. Apply to range 下,选择应应用规则的范围。
      4. Format cells if 的下拉列表中选择Custom formula is
      5. 在文本框中插入给定的公式,调整范围以匹配步骤 (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 个或更多与我们匹配的单元格。


      来源:

      【讨论】:

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