Hallo zusammen, brüte gerade über einem Problem: Habe eine Tabelle mit mehreren Spalten. In allen Spalten (Zellen) befinden sich Namen. Aus der gesamten Tabelle hätte ich nun gerne jeden Namen nur einmal. Die Funktion "Duplikate löschen" klappt nur mit einer Spalte. Beim Spezialfilter hat er immer nach gleichen Zeilen gesucht, anstatt jede Zelle für sich zu vergleichen. Kann jemand helfen? Meine Internetsuche war bisher erfolglos
Private Sub KeineDublikate() Dim rngBereich As Range Dim rngZelle As Range Dim NoDups As New Collection Dim Item As Variant Dim vx(1 To 1048576, 1 To 1) As Variant Dim I As Long
'Bei Fehler weitermachen 'Fehler tritt bei schon vorhandenem 'Key' in der Collection auf On Error Resume Next
For Each rngBereich In Selection.Areas For Each rngZelle In rngBereich 'Key = CStr(rngZelle.Value) muß einmalig sein, sonst Fehler 'That's the trick! NoDups.Add rngZelle.Value, CStr(rngZelle.Value) Next Next
'jedes einmalige Element der Collection ausgeben For Each Item In NoDups I = I + 1 vx(I, 1) = Item ' ActiveCell.Offset(1, 0).Select Next With ActiveSheet .Range(.Cells(1, 1), .Cells(I, 1)) = vx End With End Sub
Folgende(r) 1 Nutzer sagt Danke an Wastl für diesen Beitrag:1 Nutzer sagt Danke an Wastl für diesen Beitrag 28 • l5w6ed
du hast sicherlich erkannt, das die von dir zitierte Zeile nur die Ausgabe dimensioniert. der Eingabebereich wird zuvor von Hand mit der Maus oder sonstwie als ein zusammenhängender Bereich markiert, dann das Makro gestartet. Das Ergebnis steht in einer neuen Tabelle, die vor dem aktuellen Blatt erzeugt wird.
14.12.2017, 14:28 (Dieser Beitrag wurde zuletzt bearbeitet: 14.12.2017, 14:36 von snb.)
Code:
Sub M_snb() With Cells(1).CurrentRegion.Offset(1) For j = 1 To .Columns.Count .Columns(j).AdvancedFilter 2, , Cells(Rows.Count, 8).End(xlUp).Offset(1), True Next End With Columns(8).AdvancedFilter 2, , Cells(1, 10), True Columns(8).Delete End Sub
oder
Code:
Sub M_snb() sn = Cells(1).CurrentRegion.Offset(1).specialcells(2)
For Each it In sn If InStr(c00 & "|", "|" & it & "|") = 0 Then c00 = c00 & "|" & it Next st = Split(Mid(c00, 2), "|") Cells(2, 8).Resize(UBound(st) + 1) = Application.Transpose(st) End Sub