Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 11:16:26
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Eindeutige Liste erzeugen

Eindeutige Liste erzeugen
26.04.2018 10:37:31
Michael
Hallo,
ich möchte folgendes Problem mittels VBA lösen:
Ich habe in Tabellenblatt 2 in einer Spalte (ab B8) verschiedene Namen. Diese Namen haben keine bestimmte Anordnung und die gleichen Namen können auch mehrmals vorkommen. Nun will ich aus diesen Namen in Tabellenblatt 3 eine neue Liste erstellen (die auch wieder ab B8 beginnt), die nur die eindeutigen Namen beinhaltet.
Folgenden Code habe ich bereits erstellt:

Sub Liste()
Dim lRow As Long
With Sheets("Tabellenblatt2")
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
.Range("B8:B" & lRow).Copy
End With
With Sheets("Tabellenblatt3")
.Range("B8").PasteSpecial
.Range("$B$8:$B$" & lRow).RemoveDuplicates Columns:=1, Header:=xlNo
End With
End Sub

Dieser Code scheint auch soweit zu funktionieren. Das Problen ist, dass der Code beim Kopieren der Daten die Formatierung in Tabellenblatt 3 löscht.
Meine Frage ist nun, was ich verändern muss, dass die Formatierung beibehalten wird?
Ich denke die Lösung dürfte nicht allzu schwierig sein, aber da ich noch totaler VBA Anfänger bin bräuchte ich trotzdem eure Hilfe.
Vielen Dank im Voraus und viele Grüße.
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eindeutige Liste erzeugen
26.04.2018 10:56:06
Daniel
Hi
wenn die Formatierung auf Blatt 3 nicht zerstört werden soll, würde ich so vorgehen:
1. beim Kopieren immer nur die Werte kopieren: PasteSpecial xlpastevalues
2. das Duplikate-Entfernen als Zwischenschritt in einem freien Bereich ausführen (im Beispiel Spalte Z) und dann von dort als Wert in die Spalte B kopieren:
Sub Liste()
Dim lRow As Long
With Sheets("Tabellenblatt2")
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
.Range("B8:B" & lRow).Copy
End With
With Sheets("Tabellenblatt3")
.Range("Z8").PasteSpecial xlPasteValues
With .Range("$Z$8:$Z$" & lRow)
.RemoveDuplicates Columns:=1, Header:=xlNo
.Copy
.worksheet.Range("B8").PasteSpecial xlpasteValues
.ClearContents
end with
End With
End Sub
Gruß Daniel
Anzeige
AW: Eindeutige Liste erzeugen
26.04.2018 12:08:09
Michael
Hallo Daniel,
vielen Dank für die schnelle Hilfe. Der Code funktioniert einwandfrei.
Noch eine Frage. Ist dieser Code effizient? Momentan befinden sich in der zu kopierenden Liste nicht allzu viele Daten (ca. 200). Funktioniert der Code immer noch gut wenn viele Daten vorhanden sind (Größenordnung 50000) oder lässt sich er noch optimieren?
Viele Grüße,
Michael
Anzeige
AW: Eindeutige Liste erzeugen
26.04.2018 15:16:39
Daniel
Hi
sollte schon effizient sein.
Das Duplikate-Entfernen ist auch bei größeren Datenmengen recht schnell.
Eine reine VBA-Lösung über das Dictionary-Objekt mag etwas schneller sein, aber sie erfordert dann schon etwas mehr Abstraktionsvermögen und Programmierverständnis, als eine einfache Abfolge von Excel-Menüfunktionen, die man zum Entwickeln sogar ohne VBA vorab von Hand ausführen kann und die man beim Testen im Einzelstepmodus auch direkt im Tabellenblatt beobachten kann.
Es ist auch immer eine Frage, ob man jetzt mehr Excelanwender ist, der auch ein bisschen Programmiert, oder ob man Programmierer ist, der mit Excel arbeiten muss.
eine reine VBA-Lösung könnte so aussehen:
dim dic as Object
dim arr
dim z as Long
With Sheets("Tabellenblatt2")
arr = Range("B8:B" & .Cells(Rows.Count, 2).end(xlup).Row).Value
End with
Set dic = createobject("Scripting.Dictionary")
for z = 1 to ubound(arr, 1)
dic(arr(z, 1)) = 0
Next
arr = Worksheetfunction.Transpose(dic.Keys)
Sheets("TabellenBlatt3").Range("B8").Resize(ubound(arr, 1) + 1, 1) = arr
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Eindeutige Liste in Excel erstellen


Schritt-für-Schritt-Anleitung

Um eine eindeutige Liste in Excel zu erstellen, kannst du die folgende Schritt-für-Schritt-Anleitung nutzen. Dieses Beispiel basiert auf VBA und ist ideal für Excel-Nutzer, die eine eindeutige Liste aus einer Spalte generieren möchten.

  1. Öffne den VBA-Editor: Drücke ALT + F11.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (deine Datei)", dann EinfügenModul.
  3. Kopiere den folgenden VBA-Code in das Modul:
Sub Liste()
    Dim lRow As Long
    With Sheets("Tabellenblatt2")
        lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
        .Range("B8:B" & lRow).Copy
    End With
    With Sheets("Tabellenblatt3")
        .Range("Z8").PasteSpecial xlPasteValues
        With .Range("$Z$8:$Z$" & lRow)
            .RemoveDuplicates Columns:=1, Header:=xlNo
            .Copy
            .Range("B8").PasteSpecial xlPasteValues
            .ClearContents
        End With
    End With
End Sub
  1. Führe den Code aus: Drücke F5 oder gehe zu RunRun Sub/UserForm.

Jetzt solltest du in Tabellenblatt3 eine eindeutige Liste ab Zelle B8 sehen.


Häufige Fehler und Lösungen

  • Formatierung geht verloren: Wenn beim Kopieren die Formatierung verloren geht, stelle sicher, dass du nur die Werte mit PasteSpecial xlPasteValues kopierst.

  • Leere Zellen werden als Duplikate erkannt: Achte darauf, dass leere Zellen in deiner Liste nicht als Duplikate gezählt werden. Du kannst dies durch eine Filterung im Vorfeld vermeiden.


Alternative Methoden

Wenn du keine VBA-Lösungen verwenden möchtest, kannst du die eindeutig Funktion in Excel nutzen:

  1. Verwende die Formel =EINDEUTIG():

    =EINDEUTIG(B8:B100)

    Diese Formel listet alle einzigartigen Werte aus dem angegebenen Bereich auf.

  2. Verwende die Datenfunktion:

    • Gehe zu DatenDatenwerkzeugeDuplikate entfernen und wähle die Spalte aus.

Praktische Beispiele

Hier sind einige Beispiele, wie du eindeutige Werte in unterschiedlichen Szenarien auflisten kannst:

  • Eindeutige Werte aus mehreren Spalten: Verwende die RemoveDuplicates-Methode und gebe mehrere Spalten an.

  • Eindeutige Werte ohne 0: Du kannst eine zusätzliche Filterbedingung einfügen, um Werte wie 0 zu ignorieren.

.RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo

Tipps für Profis

  • VBA Dictionary nutzen: Eine schnellere Methode zur Erstellung einer Liste eindeutiger Werte ist die Verwendung eines Dictionaries. Hier ein Beispiel:
Dim dic As Object
Dim arr
Dim z As Long
With Sheets("Tabellenblatt2")
    arr = .Range("B8:B" & .Cells(Rows.Count, 2).End(xlUp).Row).Value
End With
Set dic = CreateObject("Scripting.Dictionary")
For z = 1 To UBound(arr, 1)
    dic(arr(z, 1)) = 0
Next
arr = WorksheetFunction.Transpose(dic.Keys)
Sheets("Tabellenblatt3").Range("B8").Resize(UBound(arr, 1) + 1, 1) = arr
  • Energieeffizienz: Achte darauf, dass deine VBA-Methoden auch bei großen Datenmengen, wie 50.000 Einträgen, effizient arbeiten.

FAQ: Häufige Fragen

1. Wie kann ich eine eindeutige Liste ohne VBA erstellen?
Du kannst die Funktion =EINDEUTIG() verwenden, um eine Liste eindeutiger Werte zu erstellen, ohne VBA zu nutzen.

2. Was tun, wenn meine Liste leere Zellen enthält?
Überprüfe deine Daten vor dem Kopieren und entferne leere Zellen oder nutze Filter, um sie auszuschließen.

3. Ist diese Methode auch für mehrere Spalten geeignet?
Ja, du kannst die RemoveDuplicates-Methode für mehrere Spalten anpassen, um eindeutige Werte aus mehreren Spalten zu extrahieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige