Reputation: 327
Assuming Range is contiguous & is a single column.
I want to highlight duplicate entries for the above RANGE. My VBA is as follows but is not functioning as is intended. The theme is to compare say first cell value to its bottom value using OFFSET
Sub CompareSingleRange()
Dim rangeToUse1 As Range, rangeToUse2 As Range, cell1 As Range, cell2 As Range
' Assume Selection is contiguous
Set rangeToUse1 = Selection
Set rangeToUse2 = Selection
For Each cell1 In rangeToUse1
For Each cell2 In rangeToUse2
If cell1.Value = cell2.Offset(1,0).Value Then
cell1.Interior.ColorIndex = 38
End If
Next cell2
Next cell1
End Sub
Upvotes: 1
Views: 177
Reputation:
Try a conditional formatting rule. Code it if it seems easier.
With Worksheets("Sheet1")
With .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
.FormatConditions.Delete
.FormatConditions.AddUniqueValues
With .FormatConditions(1)
.Interior.Color = vbGreen
End With
End With
End With
Upvotes: 2
Reputation: 7918
You may use Excel Worksheet
Functions
in order to complete this task; otherwise, the "pure" VBA solution is shown below (you just need to slightly modify your original Sub
with additional condition):
Sub FindDuplicates()
Dim rangeToUse1 As Range, cell1 As Range, cell2 As Range
Set rangeToUse1 = Selection
For Each cell1 In rangeToUse1
For Each cell2 In rangeToUse1
If cell1.Value = cell2.Value And cell1.Row <> cell2.Row Then
cell1.Interior.ColorIndex = 38
End If
Next cell2
Next cell1
End Sub
Hope this will help.
Upvotes: 1
Reputation: 96753
You only need a single loop:
Sub CompareSingleRange()
Dim rangeToUse1 As Range, cell1 As Range
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
' Assume Selection is contiguous
Set rangeToUse1 = Selection
For Each cell1 In rangeToUse1
If wf.CountIf(rangeToUse1, cell1) > 1 Then
cell1.Interior.ColorIndex = 38
End If
Next cell1
End Sub
Upvotes: 1