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