【问题标题】:Excel 2010 VBA highlight with different colors cells with different duplicate values across several columnsExcel 2010 VBA 突出显示不同颜色的单元格,跨多列具有不同的重复值
【发布时间】:2020-07-26 03:28:44
【问题描述】:

如何使用不同颜色突出显示 Excel 2010 中跨多个列的重复单元格?

我找到了这段代码,但它适用于一列。

    Sub Highlight_Duplicate_Entry()
        Dim cel As Variant
        Dim myrng As Range
        Dim clr As Long
    
        Set myrng = Range("A2:A" & Range("A65536").End(xlUp).Row)
        myrng.Interior.ColorIndex = xlNone
        clr = 3

        For Each cel In myrng
           If Application.WorksheetFunction.CountIf(myrng, cel) > 1 Then
              If WorksheetFunction.CountIf(Range("A2:A" & cel.Row), cel) = 1 Then
                 cel.Interior.ColorIndex = clr
                 clr = clr + 1
              Else
                 cel.Interior.ColorIndex = myrng.Cells(WorksheetFunction.Match(cel.Value, myrng, False), 1).Interior.ColorIndex
              End If
          End If
       Next
    End Sub

【问题讨论】:

  • 请在excel中使用条件格式
  • 条件格式将突出显示所有具有相同颜色的重复项。 OP 希望以不同的颜色突出显示每组重复项。

标签: vba excel


【解决方案1】:

您需要更改范围以覆盖多列,这将导致您的Match 函数失败。将其替换为Find。下面的子程序将找到指定范围内的任何重复项并用不同的颜色突出显示它们。

将您的代码替换为以下内容:

Sub Highlight_Duplicate_Entry()
    Dim ws As Worksheet
    Dim cell As Range
    Dim myrng As Range
    Dim clr As Long
    Dim lastCell As Range

    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set myrng = ws.Range("A2:d" & Range("A" & ws.Rows.Count).End(xlUp).Row)
    With myrng
        Set lastCell = .Cells(.Cells.Count)
    End With
    myrng.Interior.ColorIndex = xlNone
    clr = 3

    For Each cell In myrng
        If Application.WorksheetFunction.CountIf(myrng, cell) > 1 Then
            ' addresses will match for first instance of value in range
            If myrng.Find(what:=cell, lookat:=xlWhole, MatchCase:=False, after:=lastCell).Address = cell.Address Then
                ' set the color for this value (will be used throughout the range)
                cell.Interior.ColorIndex = clr
                clr = clr + 1
            Else
                ' if not the first instance, set color to match the first instance
                cell.Interior.ColorIndex = myrng.Find(what:=cell, lookat:=xlWhole, MatchCase:=False, after:=lastCell).Interior.ColorIndex
            End If
        End If
    Next
End Sub

根据下面的评论添加结果的屏幕截图,以帮助阐明其工作原理。每组重复项都以单独的颜色突出显示。不重复的值没有颜色:

【讨论】:

  • 您好,非常感谢您的帮助,但代码不适用于某些未突出显示的数字。您能提供更多帮助来解决我的问题吗?
  • 非常感谢,但是对于同一行的重复数字,代码没有得到。我的数据范围(仅限数字输入)在列中具有唯一数字,但在行中没有。
  • 立即尝试。它现在应该适用于您需要的所有情况。
  • 完美。但是......请......最后一件事。如何确定最后使用行的列,因为某些列的行数比其他列多,然后我将例如 C in ...Range("A" & ws.Rows.Count)... - 第 8 行,因为 C 是具有更多行的列。非常非常感谢!!!
  • 你做对了。很高兴它对你有效。您也可以自动化该部分。如果您搜索“查找最后一行 excel vba”,您应该会找到一堆有用的选项。
猜你喜欢
  • 2021-09-16
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 2011-09-11
  • 2015-03-07
相关资源
最近更新 更多