【问题标题】:Excel formula to check for duplicate words用于检查重复单词的 Excel 公式
【发布时间】:2015-05-27 21:37:23
【问题描述】:

我需要一个 excel 公式来检查是否有任何单词在一行的任何列中重复。我的示例行位于由“,”分隔的列下方。

列号E221、F221、G221、H221

列文本Sam、John/Sam/Smith、Smith、Kyle

以上 Sam 和 Smith 的名字被重复,所以这些词应该用红色突出显示。

Excel 文件链接: https://docs.google.com/spreadsheets/d/1D6PZWtbk_2IVEA4l1noFzKRFu0quXSTAewmL41xOnlo/edit?usp=sharing

【问题讨论】:

  • 如果一个单元格中有多个名称,它们是否完全如图所示用'/'分隔?一个单元格中可以有多少个名字有限制吗?你试过什么?
  • 公式只能提供输出(答案),它们不能操作工作表上的对象。如果要突出显示单词,则需要运行宏(代码解决方案)或提出可以在条件格式中使用的公式(这将突出显示整个单元格,但不会突出显示重复的单词)。你真正需要的是什么?
  • @rohrl77 理想情况下,我需要指示该行中有一个重复的名称以及该名称是哪个名称。重复的名称可以只显示在一个单元格中,并且整个单元格的突出显示将是一个额外的好处,尽管它必须是一个公式而不是一个宏。
  • @TomSharpe 一个单元格中最多可以有 6 个名称,由 / 分隔,完全如上所示。这基本上是一个名称调度名册。尝试了其他类似堆栈交换答案中的一些示例,但没有奏效,明天将发布它们,因为我今天没有文件。
  • 好的。我认为这将是一个相当长的公式,因为您必须分别搜索 6 个名称中的每一个,但它是可行的。

标签: excel excel-formula


【解决方案1】:

我认为这可以完成工作(假设您的数据位于 B1:F1 中):-

=if(b1="",0,
SUM(1-(ISERROR(FIND(MID("/"&B1&"/",FIND("|",SUBSTITUTE("/"&B1&"/","/","|",{1;2;3;4;5;6})),FIND("|",SUBSTITUTE("/"&B1&"/","/","|",{2;3;4;5;6;7}))-FIND("|",SUBSTITUTE("/"&B1&"/","/","|",{1;2;3;4;5;6}))+1),"/"&$A$1:A$1&"/"))))
+SUM(1-(ISERROR(FIND(MID("/"&B1&"/",FIND("|",SUBSTITUTE("/"&B1&"/","/","|",{1;2;3;4;5;6})),FIND("|",SUBSTITUTE("/"&B1&"/","/","|",{2;3;4;5;6;7}))-FIND("|",SUBSTITUTE("/"&B1&"/","/","|",{1;2;3;4;5;6}))+1),"/"&C$1:$G$1&"/"))))
)

它提取每个单元格中的每个名称并尝试将其与所有其他单元格匹配但是因为它使用数组常量,您不能直接在条件格式中使用它:您必须将其放入(比如说)B2:F2 并以此为基础设置条件格式,或者使用更长的公式。

这是一个数组公式,所以需要用Ctrl Shift Enter

输入

这是一个改进的公式。以前我在当前单元格的左侧和右侧匹配单元格:这个匹配包括当前单元格在内的所有单元格并减去当前单元格与其自身匹配的匹配数:-

=if(b1="",0,
SUM(1-(ISERROR(FIND(MID("/"&B1&"/",FIND("|",SUBSTITUTE("/"&B1&"/","/","|",{1;2;3;4;5;6})),FIND("|",SUBSTITUTE("/"&B1&"/","/","|",{2;3;4;5;6;7}))-FIND("|",SUBSTITUTE("/"&B1&"/","/","|",{1;2;3;4;5;6}))+1),"/"&$B$1:$F$1&"/"))))
-(LEN(B1)-LEN(SUBSTITUTE(B1,"/",""))+1)
)

如果您想要一个可以直接在条件格式中使用的公式,我认为您必须分别枚举所有可能的子字符串的所有可能匹配项,这相当乏味:-

=if(b1="",0,
SUM(
1-(ISERROR(FIND(MID("/"&B1&"/",FIND("|",SUBSTITUTE("/"&B1&"/","/","|",1)),FIND("|",SUBSTITUTE("/"&B1&"/","/","|",2))-FIND("|",SUBSTITUTE("/"&B1&"/","/","|",1))+1),"/"&$B$1:$F$1&"/"))),
1-(ISERROR(FIND(MID("/"&B1&"/",FIND("|",SUBSTITUTE("/"&B1&"/","/","|",2)),FIND("|",SUBSTITUTE("/"&B1&"/","/","|",3))-FIND("|",SUBSTITUTE("/"&B1&"/","/","|",2))+1),"/"&$B$1:$F$1&"/"))),
1-(ISERROR(FIND(MID("/"&B1&"/",FIND("|",SUBSTITUTE("/"&B1&"/","/","|",3)),FIND("|",SUBSTITUTE("/"&B1&"/","/","|",4))-FIND("|",SUBSTITUTE("/"&B1&"/","/","|",3))+1),"/"&$B$1:$F$1&"/"))),
1-(ISERROR(FIND(MID("/"&B1&"/",FIND("|",SUBSTITUTE("/"&B1&"/","/","|",4)),FIND("|",SUBSTITUTE("/"&B1&"/","/","|",5))-FIND("|",SUBSTITUTE("/"&B1&"/","/","|",4))+1),"/"&$B$1:$F$1&"/"))),
1-(ISERROR(FIND(MID("/"&B1&"/",FIND("|",SUBSTITUTE("/"&B1&"/","/","|",5)),FIND("|",SUBSTITUTE("/"&B1&"/","/","|",6))-FIND("|",SUBSTITUTE("/"&B1&"/","/","|",5))+1),"/"&$B$1:$F$1&"/"))),
1-(ISERROR(FIND(MID("/"&B1&"/",FIND("|",SUBSTITUTE("/"&B1&"/","/","|",6)),FIND("|",SUBSTITUTE("/"&B1&"/","/","|",7))-FIND("|",SUBSTITUTE("/"&B1&"/","/","|",6))+1),"/"&$B$1:$F$1&"/"))))
-(LEN(B1)-LEN(SUBSTITUTE(B1,"/",""))+1)
)

【讨论】:

  • 谢谢你试试这个:)
  • 名称的可能性是有限的,那么我将如何通过条件格式来做到这一点?因为这是一份员工名册,所以我有所有的名字。我可以将这些名称保存在单独的表格中,然后检查名称是否重复吗?谢谢
  • 是的,如果您在单独的表中列出了名称,那么计算每个在主表中出现的次数并不难,例如 Sam (2)、John (1)、Smith ( 2)。然后,如果您在主工作表中有一个单元格包含一个 count>1 的名称(如 Sam 或 Smith),您将突出显示它。不过,这确实是一个不同的问题,也许您应该这样发布。
  • 上面的示例数据是相同的,只是我列出了一个总名称列表。有什么办法可以上传excel到网站吗?
  • 在上面的主要问题中添加了指向 google docs 上的 excel 文件的链接。在文件中,D 中的列应显示该行中是否输入了任何重复的名称。姓名表有一个员工姓名列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
相关资源
最近更新 更多