2013-03-02 4 views
3

Как выделить различные цвета, дублирующие ячейки в excel 2010 на нескольких столбцах. Я нашел этот код, но он работает для одного столбца.excel 2010 vba highlight с различными цветами ячеек с разными значениями дубликатов в нескольких столбцах

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 
+0

Используйте условное форматирование в excel – 2013-03-02 18:18:22

+0

Условное форматирование выделяет все дубликаты одного цвета. OP хочет выделить каждый набор дубликатов другого цвета. –

ответ

4

Вы должны изменить диапазон, чтобы охватить несколько столбцов, которые будут вызывать вашу 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 

Добавление снимок экрана результата, основанного на комментарий ниже, чтобы помочь прояснить, как это работает. Каждый набор дубликатов выделяется отдельным цветом. Значения, которые не являются дубликатами, не окрашены: enter image description here

+0

Привет, Большое вам спасибо за помощь, но код doenst работает для некоторых номеров, которые не выделены. Не могли бы вы помочь в решении моей проблемы? –

+0

Большое вам спасибо, но за повторяющиеся номера в той же строке код не получил. Мой диапазон данных (только числовые входы) имеет уникальные номера в столбцах, но не в строках. –

+0

Попробуйте сейчас. Теперь он должен работать для всех случаев, в которых вы нуждаетесь. –

Смежные вопросы