View Full Version : Find duplicate values accross columns per row
KongUK
10-24-2017, 08:18 AM
Hi 
I need a quick way with VBA to fill in data for duplicate column, whereby if Part, Type, and Issue are the same then 'yes' in the duplicate column
  
  Row
  Part
  Type
  Issue
  Duplicate
 
 
  1
  Part-A
  Nut
  2
  No
 
 
  2
  Part-C
  Bolt
  1
  Yes
 
 
  3
  Part-B
  Washer
  2
  No
 
 
  4
  Part-C
  Bolt
  1
  Yes
 
 
  5
  Part-B
  Nut
  2
  No
 
 
  6
  Part-B
  Nut
  3
  No
 
 
  7
  Part-A
  Nut
  1
  No
 
As in the table rows 2 and 4 would be Yes
All the data will exist, column length will be dynamic range, duplicate column will begin empty
I don't mind a formula (in duplicate column) or VBA loop
Thank you
Paul_Hossler
10-24-2017, 09:03 AM
In the Dup column and fill down
=IF(COUNTIFS($A$2:$A$8,A2,$B$2:$B$8,B2,$C$2:$C$8,C2)>1,"Yes","No")
20735
MINCUS1308
10-24-2017, 09:47 AM
Here is some generic code if you have to use VBA.
Ill also attach your example Workbook.
Sub Testing()
'SET THE COLUMN NUMBERS FOR EACH COLUMN HEADER
'JUST INCASE YOUR NOT IN COLUMNS A,B,C,D LIKE THE EXAMPLE
     CPart = 1
     CType = 2
     CIssue = 3
     CDuplicate = 4
     
'SOME CRAZY LOOP STUFF
     i = 2
     Do Until Cells(i, CPart).Value = ""
          j = i + 1
          Do Until Cells(j, CPart).Value = ""
               If Cells(i, CPart).Value = Cells(j, CPart).Value Then
                    If Cells(i, CType).Value = Cells(j, CType).Value Then
                         If Cells(i, CIssue).Value = Cells(j, CIssue).Value Then
                              Cells(i, CDuplicate).Value = "Yes"
                              Cells(j, CDuplicate).Value = "Yes"
                         Else
                         'THIS IS GOING TO MISS SOME :) ILL GET THOSE LATER
                              If Cells(i, CDuplicate).Value = "" Then
                                   Cells(i, CDuplicate).Value = "No"
                              End If
                         End If
                    End If
               End If
          j = j + 1
          Loop
     'WE'LL CATCH ALL THE ONES I MISSED EARILER HERE
          If Cells(i, CDuplicate).Value = "" Then Cells(i, CDuplicate).Value = "No"
     i = i + 1
     Loop
End Sub
MINCUS1308
10-24-2017, 09:49 AM
There are definitely more elegant methods you could use But that should get it for you. If I misunderstood the question please let us know
YasserKhalil
10-24-2017, 11:30 AM
Try this
Sub Test()
    Dim x       As Variant
    Dim i       As Long
    Dim ii      As Long
    With ActiveSheet
        x = .Cells(1).CurrentRegion.Resize(, 4)
        For i = 2 To UBound(x, 1)
            If x(i, 4) <> "Yes" Then
                For ii = i + 1 To UBound(x, 1)
                    If x(ii, 1) & x(ii, 2) & x(ii, 3) = x(i, 1) & x(i, 2) & x(i, 3) Then
                        x(ii, 4) = "Yes": x(i, 4) = "Yes"
                    End If
                Next ii
            End If
        Next i
        .Cells(1).CurrentRegion.Resize(, 4) = x
    End With
End Sub
MINCUS1308
10-24-2017, 12:55 PM
for instance ^^ lol
:bow:
KongUK
10-24-2017, 11:49 PM
OK thanks
I tried YasserKhalil Solution and I am using data from columns 3,4,5, and result to go in column 8, so adjusted thus
 
With ActiveSheet
        x = .Cells(3).CurrentRegion.Resize(, 8)
        For i = 2 To UBound(x, 1)
            If x(i, 8) <> "Yes" Then
                For ii = i + 1 To UBound(x, 1)
                    If x(ii, 3) & x(ii, 4) & x(ii, 5) = x(i, 3) & x(i, 4) & x(i, 5) Then
                        x(ii, 8) = "Yes": x(i, 8) = "Yes"
                    End If
                Next ii
            End If
        Next i
        .Cells(3).CurrentRegion.Resize(, 8) = x
    End With
Seems to be working ok, just wanted to make sure I had the range covered correctly?
Thank you :=)
YasserKhalil
10-25-2017, 04:46 AM
You're welcome. Glad I can offer some help
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.