如何突出显示Excel单元格中的重复文字/单词

  • Share This
Michael Brown

该教程展示了如何使用VBA突出显示单元格内重复的单词或文本串。

Excel条件格式化可以以你能想到的各种方式突出显示重复的内容:有或没有第1次出现,在单列或多列中,连续的重复单元格,以及基于关键列中相同值的整个行。 但是,像往常一样,有一个 "但是"。 条件格式化规则在单元格级别工作,而你可能想突出显示重复的内容这只能通过宏来实现。 即使你没有任何VBA的经验,请不要急于关闭这个页面。 在这里,你可以找到现成的代码例子和如何在工作表中使用它们的详细说明。

    突出显示单元格中的重复词,忽略文本大小写

    这个例子显示了如何在一个单元格内用红色字体对重复的单词或文本串进行着色,如下图所示。 请注意,小写和大写字母被视为相同的字符。 例如。 橙色 , 橙色 橙色 被认为是同一个词。

    该宏的代码如下。

    Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Enter the delimiter that separates values in a cell" , "Delimiter" , " , " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell( Cell, Delimiter, False ) Next End Sub HighlightDupeWordsInCell( Cell As Range, Optional Delimiter As String = " " , Optional CaseSensitive AsBoolean = True ) Dim text As String Dim words() As String Dim word As String Dim wordIndex, matchCount, positionInText As Integer If CaseSensitive Then words = Split(Cell.Value, Delimiter) Else words = Split(LCase(Cell.Value), Delimiter) End If For wordIndex = LBound (words) To UBound (words) - 1 word = words(wordIndex) matchCount = 0 For nextWordIndex = wordIndex + 1 To UBound(words) If word =words(nextWordIndex) then matchCount = matchCount + 1 End If Next nextWordIndex If matchCount> 0 Then text = "" For Index = LBound (words) To UBound (words) text = text & words(Index) If (words(Index) = word) Then Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed End If text = text & Delimiter Next End If Next wordIndex End Sub

    突出显示单元格中重复的文本,对大小写敏感

    在大多数情况下,我们倾向于在Excel中处理文本条目时忽略字母大小写。 然而,在某些情况下,文本大小写确实很重要。 例如,如果你正在处理ID、密码或其他类似的记录,字符串如 1-AA , 1-aa 1-Aa 不是重复的,不应强调。

    在这种情况下,使用以下版本的代码。

    Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Enter the delimiter that separates values in a cell" , "Delimiter" , " , " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell( Cell, Delimiter, True ) Next End Sub HighlightDupeWordsInCell( Cell As Range, Optional Delimiter As String = " " , Optional CaseSensitive AsBoolean = True ) Dim text As String Dim words() As String Dim word As String Dim wordIndex, matchCount, positionInText As Integer If CaseSensitive Then words = Split(Cell.Value, Delimiter) Else words = Split(LCase(Cell.Value), Delimiter) End If For wordIndex = LBound (words) To UBound (words) - 1 word = words(wordIndex) matchCount = 0 For nextWordIndex = wordIndex + 1 To UBound (words) If word =words(nextWordIndex) then matchCount = matchCount + 1 End If Next nextWordIndex If matchCount> 0 Then text = "" For Index = LBound (words) To UBound (words) text = text & words(Index) If (words(Index) = word) Then Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed End If text = text & Delimiter Next End If Next wordIndex End Sub

    如何使用宏来突出显示Excel中的重复词

    如果你是一个使用VBA的初学者,下面的分步说明会让你很舒服地完成。 有经验的用户可以直接选择下载链接,跳过其他部分:)

    将代码添加到你的工作簿中

    你首先要在你的Excel工作簿中插入宏的代码。 下面是方法。

    1. 打开你要突出显示重复的工作簿。
    2. 按Alt + F11打开Visual Basic编辑器。
    3. 在左侧窗格中,右键单击 这本工作手册 并选择 插入 > 模块 从上下文菜单中选择。
    4. 将代码粘贴在代码窗口中。
    5. 为了保留宏以便将来使用,一定要把工作簿保存为支持宏的.xlsm文件。

    或者,你可以下载我们的样本工作簿,并从那里运行宏。 样本工作簿包含以下宏。

    • HighlightDupesCaseInsensitive - 忽略字母大小写,对单元格内的重复内容进行阴影处理。
    • HighlightDupesCaseSensitive - 考虑到字母大小写,突出显示单元格中的重复内容。

    欲了解更多信息,请参见如何在Excel中插入VBA代码。

    运行宏程序

    将代码添加到你自己的工作簿中,或下载并打开我们的样本文件,以这种方式运行该宏。

    1. 在你的工作表中,选择你希望突出显示重复文本的单元格。 这可以是一个单元格或多个不相邻的单元格。
    2. 按Alt + F8 。
    3. 选择感兴趣的宏,并点击 运转 .

    4. 宏会要求你指定分隔所选单元格中数值的分隔符。 预设的分隔符(在我们的例子中是一个逗号和一个空格)会自动出现在输入框中。 根据你的需要,你可以保留默认的分隔符或输入一个不同的分隔符,然后点击确定。

    一会儿,被选中的单元格中所有重复的字符串将被染成红色(或你代码中设置的任何字体颜色)。

    提示:为了快速 删除重复的内容 在一个单元格内,你可以利用Remove Duplicate Substrings,这是我们的终极套件中包含的许多节省时间的工具之一。

    如何根据你的需要调整代码

    有了这些使用说明和非常基本的VBA知识(或者只是密切关注下面的说明),你可以很容易地完全按照你的需要修改这些代码。

    放在同一模块上

    正如你可能注意到的,这两个宏( HighlightDupesCaseSensitive HighlightDupesCaseInsensitive )调用 突出显示单元格中的文字(HighlightDupeWordsInCell 上述两个宏的区别仅在于传递给上述函数的第三个参数(CaseSensitive)。

    对于大小写敏感的搜索,它被设置为TRUE。

    调用HighlightDupeWordsInCell(Cell, Delimiter, True)。

    对于不区分大小写的搜索,它被设置为FALSE。

    调用HighlightDupeWordsInCell(Cell, Delimiter, False)。

    为了使宏能够工作,在 突出显示单元格中的文字(HighlightDupeWordsInCell 函数必须放在与宏相同的模块上。

    分隔符

    运行时,宏会要求你指定分隔所选单元格中单词/字符串的分隔符。 默认的分隔符是逗号和空格(","),它被预设在输入框中。

    Delimiter = InputBox("指定分隔单元格中数值的分隔符", "分隔符", ", ")

    在你的代码中,你可以自由地使用任何其他字符作为预定义的分隔符。

    颜色

    在默认情况下, 突出显示单元格中的文字(HighlightDupeWordsInCell 在这一行中定义了红色字体的颜色。

    Cell.Characters(positionInText, Len(word)).Font.Color = vbRed

    在这里,vbRed是一种VBA颜色常量。 要想用不同的颜色显示重复的内容,你可以用另一个常量如vbGreen、vbYellow替换vbRed。 vbBlue,等等。 T 支持的颜色常数列表可以在这里找到。

    这就是如何高亮显示Excel单元格中的重复字词。 感谢你的阅读,希望下周能在我们的博客上见到你

    可用的下载

    突出显示单元格(.xlsm文件)中的重复内容的代码示例

    终极套房14天全功能版(.exe文件)

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.