VBA: hinzufügen von eindeutigen Werten in einem Bereich, um einen neuen Bereich
Ich habe eine unsortierte Liste von Namen in Tabelle1, Spalte a Viele dieser Namen erscheinen mehr als einmal in der Liste.
In Tabelle2 Spalte A möchte ich eine alphabetisch sortierte Liste der Namen ohne doppelte Werte.
Was ist die optimale Methode, dies zu erreichen, mithilfe von VBA?
Methoden, die ich bisher gesehen habe, gehören:
- Machen eine Sammlung mit CStr(name) als Schlüssel, Durchlaufen der Reihe und versuchen, um jeden Namen, und wenn es ein Fehler ist es nicht eindeutig, es zu ignorieren, andere erweitern das Spektrum von 1 Zelle und fügen Sie den Namen
- Gleiche wie (1), außer ignorieren, über die Fehler. Wenn die Schleife abgeschlossen ist, werden nur eindeutige Werte werden in der Sammlung: fügen Sie die ganze Sammlung auf den Bereich
- Mit dem match-Arbeitsblatt-Funktion auf die Reihe: wenn keine übereinstimmung, erweitern der Auswahl um eine Zelle und fügen Sie den Namen
- Vielleicht einige simulation der "Duplikate entfernen" - Taste auf der Registerkarte "Daten"? (habe nicht in diese sah)
- Ich würde in mit Option 4. 1) ein makro Aufzeichnen 2) Kopieren Col-2 Blatt 3) Wählen Sie Col und drücken Sie die Duplikate entfernen-Taste unter der Registerkarte "Daten", wenn Sie Excel 2007 verwenden 4) Art der Daten 🙂 probieren Sie es aus und wenn du nicht weiter kommst, dann poste zurück 🙂
- +1 für Siddharth Antwort. Dies sollte sehr einfach sein.
- Fragen wie diese wurden aufgefordert, so viele Male auf SO... Haben Sie einen Blick auf die vorherigen Antworten (hier zum Beispiel), etwas ausprobieren, sehen, ob es funktioniert, Holen Sie sich zurück zu uns mit Problemen. Dieser und dieser wäre nützlich zu Lesen-auch für Sie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie schlug vor, ein Wörterbuch von einer Art ist der Schlüssel. Ich würde eine Sammlung - es ist vordefiniert (im Gegensatz zu den Scripting.Wörterbuch) und macht den job.
Wenn du mit "optimal" meinst du "schnell", der zweite trick ist, nicht auf jede Zelle einzeln. Stattdessen verwenden Sie einen Puffer. Der code unten wird schnell auch mit tausenden von Zeilen der Eingabe.
Code:
Ich wirklich wie das dictionary-Objekt in VBA. Es ist nicht nativ verfügbar, aber es ist sehr fähig. Müssen Sie fügen Sie einen Verweis auf
Microsoft Scripting Runtime
dann können Sie etwas wie das hier tun: