Buscar..


Introducción

En ciertos puntos, estará evaluando un rango de datos y necesitará ubicar los duplicados en ellos. Para conjuntos de datos más grandes, hay una serie de enfoques que puede utilizar que utilizan el código VBA o funciones condicionales. Este ejemplo utiliza una condición simple if-then dentro de dos bucles anidados para ver si cada celda del rango tiene el mismo valor que cualquier otra celda del rango.

Encuentra duplicados en un rango

Las siguientes pruebas van del A2 al A7 para valores duplicados. Observación: este ejemplo ilustra una posible solución como un primer acercamiento a una solución. Es más rápido usar una matriz que un rango y uno podría usar colecciones o diccionarios o métodos xml para verificar si hay duplicados.

    Sub find_duplicates()
' Declare variables
  Dim ws     As Worksheet               ' worksheet
  Dim cell   As Range                   ' cell within worksheet range
  Dim n      As Integer                 ' highest row number
  Dim bFound As Boolean                 ' boolean flag, if duplicate is found
  Dim sFound As String: sFound = "|"    ' found duplicates
  Dim s      As String                  ' message string
  Dim s2     As String                  ' partial message string
' Set Sheet to memory
  Set ws = ThisWorkbook.Sheets("Duplicates")

' loop thru FULLY QUALIFIED REFERENCE
  For Each cell In ws.Range("A2:A7")
    bFound = False: s2 = ""             ' start each cell with empty values
 '  Check if first occurrence of this value as duplicate to avoid further searches
    If InStr(sFound, "|" & cell & "|") = 0 Then
    
      For n = cell.Row + 1 To 7           ' iterate starting point to avoid REDUNDANT SEARCH
        If cell = ws.Range("A" & n).Value Then
           If cell.Row <> n Then        ' only other cells, as same cell cannot be a duplicate
                 bFound = True             ' boolean flag
              '  found duplicates in cell A{n}
                 s2 = s2 & vbNewLine & " -> duplicate in A" & n
           End If
        End If
       Next
     End If
   ' notice all found duplicates
     If bFound Then
         ' add value to list of all found duplicate values
         ' (could be easily split to an array for further analyze)
           sFound = sFound & cell & "|"
           s = s & cell.Address & " (value=" & cell & ")" & s2 & vbNewLine & vbNewLine
     End If
   Next
' Messagebox with final result
  MsgBox "Duplicate values are " & sFound & vbNewLine & vbNewLine & s, vbInformation, "Found duplicates"
End Sub

Dependiendo de sus necesidades, el ejemplo puede modificarse; por ejemplo, el límite superior de n puede ser el valor de la fila de la última celda con datos en el rango, o la acción en caso de una condición True If puede editarse para extraer el duplicado valor en otro lugar. Sin embargo, la mecánica de la rutina no cambiaría.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow