Suche…


Einführung

An bestimmten Stellen werden Sie eine Reihe von Daten auswerten, und Sie müssen die Duplikate darin finden. Bei größeren Datensätzen gibt es verschiedene Ansätze, die entweder VBA-Code oder bedingte Funktionen verwenden. In diesem Beispiel wird eine einfache if-then-Bedingung in zwei verschachtelten for-next-Schleifen verwendet, um zu testen, ob jede Zelle im Bereich gleichwertig ist mit einer anderen Zelle im Bereich.

Duplikate in einem Bereich finden

Die folgenden Tests reichen von A2 bis A7 für doppelte Werte. Anmerkung: Dieses Beispiel zeigt eine mögliche Lösung als ersten Lösungsansatz. Es ist schneller, ein Array als einen Bereich zu verwenden, und Sie könnten Sammlungen, Wörterbücher oder XML-Methoden verwenden, um nach Duplikaten zu suchen.

    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

Je nach Ihren Anforderungen kann das Beispiel geändert werden. Beispielsweise kann die obere Grenze von n der Zeilenwert der letzten Zelle mit Daten im Bereich sein oder die Aktion im Fall einer True-If-Bedingung kann bearbeitet werden, um das Duplikat zu extrahieren Wert woanders. Die Mechanik der Routine würde sich jedoch nicht ändern.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow