Search code examples
excelduplicate-datavba

VBA to check duplicate based on multiple columns and show which row is duplicating with which one


My excel has data from column A to AH and what I am trying to do is,

  1. Check the duplicate based on first three columns
  2. Insert a column as first column and mark the duplicate rows as duplicates along with the row number which is duplicating

I have tried with the below codes which is based on single column but finding hard to make in multiple column and indicating the rows number, any thought will be appreciated.

 Sub FindDuplicatesInColumn()
'Declaring the lastRow variable as Long to store the last row value in the Column1
    Dim lastRow As Long

'matchFoundIndex is to store the match index values of the given value
    Dim matchFoundIndex As Long

'iCntr is to loop through all the records in the column using For loop
    Dim iCntr As Long

'test the column A and insert a column or clear data
    If Range("A1").Value = "PDBC_PFX" Then
        Range("A1").EntireColumn.Insert
        Range("A1").Value = "DUPE_CHECK"
    Else
        Range("A2:A65000").Clear
    End If

'Finding the last row in the Column B
    lastRow = Range("B65000").End(xlUp).Row

'looping through the column B
    For iCntr = 1 To lastRow
        'checking if the cell is having any item, skipping if it is blank.
        If Cells(iCntr, 2) <> "" Then
            'getting match index number for the value of the cell
            matchFoundIndex = WorksheetFunction.Match(Cells(iCntr, 2), Range("B1:B" & lastRow), 0)
            'if the match index is not equals to current row number, then it is a duplicate value
            If iCntr <> matchFoundIndex Then
                'Printing the label in the column A
                Cells(iCntr, 1) = "Duplicate"
            End If
        End If
    Next

'auto fit column A
    Columns("A").AutoFit

End Sub

Solution

  • I tried with simple concatenate which I am familier but still not able to figure it out to add the row number and it is bit slow, let me know how I can improve on the below code and adding the row number duplicating with.

    Sub FindDuplicatesInColumn()
    'Declaring the lastRow variable as Long to store the last row value in the Column1
        Dim lastRow As Long
    
    'matchFoundIndex is to store the match index values of the given value
        Dim matchFoundIndex As Long
    
    'iCntr is to loop through all the records in the column using For loop
        Dim iCntr As Long
    
    'test the column A and insert a column or clear data
        If Range("A1").Value = "PDBC_PFX" Then
            Range("A1").EntireColumn.Insert
            Range("A1").EntireColumn.Insert
            Range("A1").Value = "DUPE_CHECK"
            Range("B1").Value = "KEY"
        ElseIf Range("B1").Value = "PDBC_PFX" Then
            Range("B1").EntireColumn.Insert
            Range("B1").Value = "KEY"
        Else
            Range("A2:B65000").Clear
        End If
    
    'Finding the last row in the Column B
        lastRow = Range("C65000").End(xlUp).Row
    
    'add a key for the columns to check
        Range("B2:B" & lastRow).FormulaR1C1 = "=RC[1]&RC[2]&RC[3]"
        Range("B:B").Value = Range("B:B").Value
    
    
    'looping through the column B
        For iCntr = 1 To lastRow
            'checking if the cell is having any item, skipping if it is blank.
            If Cells(iCntr, 2) <> "" Then
                'getting match index number for the value of the cell
                matchFoundIndex = WorksheetFunction.Match(Cells(iCntr, 2), Range("B1:B" & lastRow), 0)
                'if the match index is not equals to current row number, then it is a duplicate value
                If iCntr <> matchFoundIndex Then
                    'Printing the label in the column A
                    Cells(iCntr, 1) = "Duplicate"
                End If
            End If
        Next
    
    'auto fit column A
        Columns("A").AutoFit
    
    'remove key column after validation
        Columns("B").Delete
    
    End Sub