Sök…


Introduktion

Vid vissa punkter utvärderar du en mängd data och du måste hitta duplikaten i den. För större datamängder finns det ett antal tillvägagångssätt som du kan använda som använder antingen VBA-kod eller villkorade funktioner. Detta exempel använder ett enkelt om-då-tillstånd inom två kapslade nästa slingor för att testa om varje cell i området är lika i värde som någon annan cell i området.

Hitta duplikat inom en rad

Följande test varierar mellan A2 och A7 för duplikatvärden. Anmärkning: Detta exempel illustrerar en möjlig lösning som en första strategi för en lösning. Det är snabbare att använda en matris än ett intervall och man kan använda samlingar eller ordböcker eller xml-metoder för att kontrollera efter duplikat.

    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

Beroende på dina behov kan exemplet ändras - till exempel kan den övre gränsen för n vara radvärdet för den sista cellen med data i intervallet, eller åtgärden om ett True If-tillstånd kan redigeras för att extrahera duplikatet värde någon annanstans. Men rutinens mekanik skulle inte förändras.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow