Sub DuplicatesColoring()
Dim Dupes() 'объявляем массив для хранения дубликатов
ReDim Dupes(1 To Selection.Cells.Count, 1 To 2)
Selection.Interior.ColorIndex = -4142 'убираем заливку если была
i = 3
For Each cell In Selection
If WorksheetFunction.CountIf(Selection, cell.Value) > 1 Then
For k = LBound(Dupes) To UBound(Dupes)
'если ячейка уже есть в массиве дубликатов - заливаем
If Dupes(k, 1) = cell Then cell.Interior.ColorIndex = Dupes(k, 2)
Next k
'если ячейка содержит дубликат, но еще не в массиве - добавляем ее в массив и заливаем
If cell.Interior.ColorIndex = -4142 Then
cell.Interior.ColorIndex = i
Dupes(i, 1) = cell.Value
Dupes(i, 2) = i
i = i + 1
End If
End If
Next cell
End Sub
Option Explicit
'123456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789
Private IndexColors As New Collection, CurrentColor As Integer, BaseSheetIndex As Byte
Sub DuplicatesColoring()
Dim cell As Range, selected As Range
Set selected = Selection
If BaseSheetIndex = 0 Then _
BaseSheetIndex = ActiveSheet.Index: CurrentColor = 3 ' Начальные значения
selected.Interior.ColorIndex = -4142 ' Убрать заливку
For Each cell In selected
If Not IsEmpty(cell.Value) Then
On Error Resume Next ' Включить обработку исключений
If BaseSheetIndex = ActiveSheet.Index _
And WorksheetFunction.CountIf(selected, cell.Value2) > 1 Then
IndexColors.Add CurrentColor, CStr(cell.Value2) ' Заполнить коллекцию
If Not Err.Number = 457 Then CurrentColor = CurrentColor + 1
End If
cell.Interior.ColorIndex = IndexColors(CStr(cell.Value2))
On Error GoTo 0
End If
Next cell
Do Until ActiveSheet.Index > ActiveWorkbook.Sheets.Count - 1
ActiveWorkbook.Sheets(ActiveSheet.Index + 1).Activate
DuplicatesColoring
Exit Sub ' Предотвратить бесконечную рекурсию
Loop
Worksheets(BaseSheetIndex).Activate
End Sub