Recherche…


Introduction

À certains moments, vous évaluerez une série de données et vous devrez y localiser les doublons. Pour les ensembles de données plus volumineux, il existe un certain nombre d'approches utilisant le code VBA ou les fonctions conditionnelles. Cet exemple utilise une simple condition if-then dans deux boucles imbriquées suivantes pour tester si chaque cellule de la plage est égale en valeur à une autre cellule de la plage.

Trouver des doublons dans une plage

Les tests suivants vont de A2 à A7 pour les valeurs en double. Remarque: Cet exemple illustre une solution possible en tant que première approche d’une solution. Il est plus rapide d'utiliser un tableau qu'une plage et on peut utiliser des collections, des dictionnaires ou des méthodes XML pour vérifier les doublons.

    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

Selon vos besoins, l'exemple peut être modifié - par exemple, la limite supérieure de n peut être la valeur de ligne de la dernière cellule contenant des données dans la plage, ou l'action en cas de condition True Si peut être modifiée pour extraire la copie. valeur ailleurs. Cependant, la mécanique de la routine ne changerait pas.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow