如果谷歌电子表格的同一列中的值重复,如何突出显示单元格?
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)
说明:这仅在两个COUNTIF
s 都是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(...) > 1
。使用> 1
是因为我们知道至少有一个单元格与我们的单元格相同。那是我们的单元格,它在范围内,因此将与自身进行比较。因此,要表示重复,我们需要找到 2 个或更多与我们匹配的单元格。
来源:
文档编辑器帮助:COUNTIF() 文档编辑器帮助:INDIRECT() 文档编辑器帮助:ADDRESS() 文档编辑器帮助:ROW() 文档编辑器帮助:COLUMN()【讨论】:
遗憾的是这对我不起作用。尽管有很多重复项,但它根本无法突出显示任何内容。不知道为什么,这听起来是个不错的解决方案。 这对我有用,但也会突出显示空白单元格。有没有办法排除空白? @Amanda - 是的,有点创造力,这是可能的。我是 AFK 一周,但在一周内接我。半,我很乐意提供帮助。这个想法是创建一个 AND 语句(使用*
)和另一个检查,所以沿着((COUNTIF(...))*(NOT(ISBLANK(INDIRECT(...current cell...)))))
的行。这是我在手机上能做的最好的事情。 :)
这正是所需的解决方案。这就像一个 HASHMAP 来识别重复项。
作品迷人,感谢@Selfish!节省了我的时间。注意:唯一要更改的内容必须是 $A$1:$C$50
- 根据有问题的列。与 zolley 相比,我更喜欢这种更通用的方法。以上是关于如果谷歌电子表格的同一列中的值重复,如何突出显示单元格?的主要内容,如果未能解决你的问题,请参考以下文章