Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1620to1624
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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.

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
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

10 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige