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

请问有人能帮我解答这个问题吗?


当前回答

我试了所有的方法,没有一个奏效。

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

来源: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秒的时间里,我的重复行被着色了。只需要复制脚本。

如果你不知道谷歌应用程序脚本,这个链接可以帮助你:

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

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

我希望这能有所帮助。

其他回答

突出显示重复的(在C栏):

=COUNTIF(C:C, C1) > 1

Explanation: The C1 here doesn't refer to the first row in C. Because this formula is evaluated by a conditional format rule, instead, when the formula is checked to see if it applies, the C1 effectively refers to whichever row is currently being evaluated to see if the highlight should be applied. (So it's more like INDIRECT(C &ROW()), if that means anything to you!). Essentially, when evaluating a conditional format formula, anything which refers to row 1 is evaluated against the row that the formula is being run against. (And yes, if you use C2 then you asking the rule to check the status of the row immediately below the one currently being evaluated.)

因此,这就是说,计算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(它必须是>=而不仅仅是>,否则最后一个副本将被忽略)。

我试了所有的方法,没有一个奏效。

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

来源: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秒的时间里,我的重复行被着色了。只需要复制脚本。

如果你不知道谷歌应用程序脚本,这个链接可以帮助你:

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

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

我希望这能有所帮助。

虽然zolley的答案完全适合这个问题,但这里有一个更普遍的解决方案,适用于任何范围,并有解释:

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

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


要突出重复的内容:

选择需要重复标记的整个范围。 菜单显示:Format >条件格式设置… 在“应用到范围”下,选择规则应应用到的范围。 在“格式单元格”中,在下拉菜单中选择“自定义公式”。 在文本框中插入给定的公式,调整范围以匹配步骤(3)。


为什么它能起作用?

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

第二个块,INDIRECT(ADDRESS(ROW(), COLUMN(), 4)),将返回当前单元格的内容。如果它被放置在单元格内,文档会抱怨循环依赖,但在这种情况下,公式的计算就像它在单元格中一样,没有改变它。

ROW()和COLUMN()将分别返回给定单元格的行号和列号。如果不提供参数,则返回当前单元格(这是基于1的,例如,B3将为ROW()返回3,为COLUMN()返回2)。

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

,将接受单元格引用并返回其内容。在本例中,是当前单元格的内容。然后回到开始,COUNTIF()将测试范围内的每个单元格,并返回计数。

最后一步是使我们的公式返回一个布尔值,方法是将其设置为逻辑表达式:COUNTIF(…)> 1。之所以使用> 1,是因为我们知道至少有一个单元格与我们的相同。这是我们的单元格,它在值域内,因此会和它自己比较。因此,为了表示副本,我们需要找到两个或更多与我们的单元格匹配的单元格。


来源:

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

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

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

试试这个:

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

在A1:A100单元格中写入的任何内容都将被检查,如果有重复的(出现多次),那么它将被着色。

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

对于多列,使用计数。