Thursday, January 23, 2025
No menu items!
HomeData Analytics and VisualizationVBA : Multiple Ways to Identify Duplicates in Excel

VBA : Multiple Ways to Identify Duplicates in Excel

This tutorial explains how to identify duplicates in one or more columns using VBA in MS Excel.

You can download the following dataset to practice.



1. Using Conditional Formatting

rng.FormatConditions.Add adds a new condition to the range for formatting purposes. Type:=xlExpression allows to create a formula that will be calculated for each cell in the range to check whether the condition is met or not.

FormatConditions.Interior.Color fills the cell with color if it satisfies the formatting condition.

Case I: For Single Column

The following code identifies duplicates in a single column (column A) using conditional formatting.

Sub ApplyConditionalFormattingForDuplicates()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim rng As Range
    
    Set ws = ThisWorkbook.ActiveSheet
    
    lastRow = ws.Cells(ws.Rows.count, 1).End(xlUp).Row
    
    Set rng = ws.Range("A1:A" & lastRow)

    rng.FormatConditions.Delete
    
    rng.FormatConditions.Add Type:=xlExpression, Formula1:="=COUNTIF($A$1:$A$" & lastRow & ", A1)>1"
    
    rng.FormatConditions(1).Interior.Color = vbRed
End Sub

Press Run or F5 to run the above code.

VBA: Identifying Duplicates using Conditional Formatting

Case II: For Multiple Columns

In this case we highlight duplicates present in both the column A and B. Follow the code given below:

Sub ApplyConditionalFormattingForDuplicates()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim rng As Range
    
    Set ws = ThisWorkbook.ActiveSheet
    
    lastRow = ws.Cells(ws.Rows.count, 1).End(xlUp).Row
    
    Set rng = ws.Range("A1:B" & lastRow)

    rng.FormatConditions.Delete
    
    rng.FormatConditions.Add Type:=xlExpression, Formula1:="=COUNTIF($A$1:$B$" & lastRow & ", A1)>1"
    
    rng.FormatConditions(1).Interior.Color = vbRed
End Sub

Press Run or F5 to run the above code.

VBA: Identifying Duplicates using Conditional Formatting
2. Using COUNTIF Function

The COUNTIF function in Excel and VBA is used to count the number of cells in a range that meet a specific condition or criteria.

count = Application.WorksheetFunction.CountIf(rng, cell.Value). This code returns the number of times cell.Value repeats in the given range(rng).

Case I: For Single Column

The following code identifies duplicates in a single column (column A) using COUNTIF Function.

Sub IdentifyDuplicatesUsingCountIf()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim count As Long
    Dim lastRow As Long
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
   lastRow = ws.Cells(ws.Rows.count, 1).End(xlUp).Row

    Set rng = ws.Range("A1:A" & lastRow)
    
    
    For Each cell In rng
        If Not IsEmpty(cell.Value) Then
            count = Application.WorksheetFunction.CountIf(rng, cell.Value)
            If count > 1 Then
                
                cell.Interior.Color = vbRed
            End If
        End If
    Next cell
    
End Sub

Press Run or F5 to run the above code.

VBA:Identifying Duplicates Using COUNTIF Function

Case II: For Multiple Columns

The following code identifies duplicates in multiple columns (Column A and B) using COUNTIF Function.

Sub IdentifyDuplicatesUsingCountIf()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim count As Long
    Dim lastRow As Long
    
    Set ws = ThisWorkbook.Sheets("Sheet2")
    
   lastRow = ws.Cells(ws.Rows.count, 1).End(xlUp).Row

    Set rng = ws.Range("A1:B" & lastRow)
    
    
    For Each cell In rng
        If Not IsEmpty(cell.Value) Then
            count = Application.WorksheetFunction.CountIf(rng, cell.Value)
            If count > 1 Then
                
                cell.Interior.Color = vbRed
            End If
        End If
    Next cell
    
End Sub

Press Run or F5 to run the above code.

VBA:Identifying Duplicates Using COUNTIF Function
3. Using For Each Loop

Case I: For Single Column

The following code identifies duplicates in a single column (column A) using For Each Loop.

Sub FindDuplicatesUsingForEach()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim cell As Range
    Dim compareCell As Range
   
    Set ws = ThisWorkbook.ActiveSheet

    
    lastRow = ws.Cells(ws.Rows.count, 1).End(xlUp).Row
       
    For Each cell In ws.Range("A1:A" & lastRow)
       
        For Each compareCell In ws.Range("A1:A" & lastRow)
            If cell.Value = compareCell.Value And cell.Address  compareCell.Address Then
                
                
                compareCell.Interior.Color = vbRed
            End If
        Next compareCell
    Next cell
End Sub

Press Run or F5 to run the above code.

VBA:Identifying Duplicates Using For Each Loop

Case II: For multiple columns

The following code identifies duplicates in multiple columns (column A and B) using COUNTIF Function.

Sub FindDuplicatesUsingForEach()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim cell As Range
    Dim compareCell As Range
   
    Set ws = ThisWorkbook.ActiveSheet

    
    lastRow = ws.Cells(ws.Rows.count, 1).End(xlUp).Row
       
    For Each cell In ws.Range("A1:B" & lastRow)
       
        For Each compareCell In ws.Range("A1:B" & lastRow)
            If cell.Value = compareCell.Value And cell.Address  compareCell.Address Then
                
                
                compareCell.Interior.Color = vbRed
            End If
        Next compareCell
    Next cell
End Sub

Press Run or F5 to run the above code.

VBA:Identifying Duplicates Using For Each Loop
4. Using Scripting.Dictionary Object

Scripting.Dictionary object store the values encountered in the dataset. While looping through the data if the value exists in the dictionary it means we have encountered a duplicate.
If it doesn’t exist then we add it to the dictionary.

Case I: For Single Column

The following code identifies duplicates in a single column (Column A) using “Scripting.Dictionary” method.

Sub FindDuplicatesWithDictionary()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim lastColumn As Long
    Dim iCntr As Long
    Dim cellValue As Variant
    Dim dict As Object
    Dim key As Variant

    Set dict = CreateObject("Scripting.Dictionary")
      
    Set ws = ThisWorkbook.ActiveSheet
  
    lastRow = ws.Cells(ws.Rows.count, 1).End(xlUp).Row
    
            For iCntr = 1 To lastRow
            cellValue = ws.Cells(iCntr, 1).Value
            
            If cellValue  "" Then
                If dict.Exists(cellValue) Then
                    ws.Cells(iCntr, 1).Interior.Color = vbRed
                Else
                    dict.Add cellValue, True
                End If
            End If
        Next iCntr
        
    Set dict = Nothing
End Sub

Press Run or F5 to run the above code.

VBA : Using Scripting.Dictionary to identify duplicates

Case II: For Multiple Columns

The following code identifies the duplicates in multiple columns (Column A and B) using “Scripting.Dictionary” method.

Sub FindDuplicatesWithDictionary()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim lastColumn As Long
    Dim iCntr As Long
    Dim iPntr As Long
    Dim cellValue As Variant
    Dim dict As Object
    Dim key As Variant

    Set dict = CreateObject("Scripting.Dictionary")
    
    
    Set ws = ThisWorkbook.ActiveSheet
    
    
    lastRow = ws.Cells(ws.Rows.count, 1).End(xlUp).Row
    lastColumn = ws.Cells(1, ws.Columns.count).End(xlToLeft).Column
    
        For iPntr = 1 To lastColumn
        For iCntr = 1 To lastRow
            cellValue = ws.Cells(iCntr, iPntr).Value
            
            If cellValue  "" Then
                If dict.Exists(cellValue) Then
                    ws.Cells(iCntr, iPntr).Interior.Color = vbRed
                Else
                    dict.Add cellValue, True
                End If
            End If
        Next iCntr
    Next iPntr

   
    Set dict = Nothing
End Sub 

Press Run or F5 to run the above code.

Using Scripting.Dictionary to identify duplicates

Read MoreListenData

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments