Mit VBA spezielle Excel Sortierung?
Hallo, folgendes Problem.
Ich habe 2 Excel Listen mit Namen, ca. 190 Stück. (Neben den Namen gibt es natürlich weitere Daten)
Die eine ist alphabetisch sortiert, die andere quer durcheinander, nun brauche ich die alphabetische liste allerdings in der gleichen reihenfolge wie die durchmischte.
Hintergrund ist, ich muss Daten abgleichen und durch die unterschiedliche Reihenfolge bin ich nur am hin und herspringen, das dauert stunden. Die manuell neu zu sortieren ebenfalls, und da die unsortierte Liste Bezüge zu einem externen System hat, kann/darf ich diese nicht einfach alphabetisch umsortieren ....
Ich weiß, das es per VBA irgendwie geht, es gibt routinen für suchen und sortieren, aber ich bin in VBA nicht fit genug, um das hinzubekommen. Vielleicht denke ich auch zu kompliziert und es gibt eine Excel-interne-nicht-VBA-Lösung?
Danke schonmal für eure Hilfe. Gruß Stroiner.
4 Antworten
Du hast geschrieben du hast zwei Listen. Ändere doch einfach beide Listen alphabetisch?
Schritt 1 unsortiert:
Dann habe ich jeweils die Spalte Name markiert und bin auf Sortieren und Filtern gegangen - von A bis Z sortieren.
Fertig.


Das wäre natürlich die einfachste Variante, aber der FS hat dies bereits explizit ausgeschlossen gehabt.
yo, das geht leider nicht weil ein externes system (keine dynamischen bezüge) zu der datei hat, eine änderung der zeilen würde alles zerschiessen.
Mit VBA: Es gibt 3 Tabellenblätter:
Blatt1 hat den Namen "Alphabetische Liste". Name steht in Feld A1.
Blatt2 hat den Namen "Referenzliste". Name steht in Feld A1.
Weiterhin muss ein Tabellenblatt "NeueListe" angeordnet werden. Nach Ausführung meines Codes wird folgende Tabelle erstellt:
Thorsten steht dabei dann in Feld A2.
Verglichen werden immer nur die Namen zwischen Referenzliste und AlphabetischerListe. Sind diese gleich, dann wird die gesamte Zeile der AlphabetischenListe in eine neue Zeile kopiert.
Bei Dieter habe ich in der alphabetischenListe einen Fehler im Alter eingebaut. Wenn man nun händisch die NeueListe mit der Referenzliste vergleicht, fällt dieser Fehler auf.
Sub ordnen()
letztezeileSpalteAreferenzListe = Worksheets("Referenzliste").Cells(Rows.Count, 1).End(xlUp).Row
letztezeileSpalteAalpahabetischeListe = Worksheets("AlphabetischeListe").Cells(Rows.Count, 1).End(xlUp).Row
m = 2
For i = 2 To letztezeileSpalteAreferenzListe
nameReferenzliste = Worksheets("Referenzliste").Cells(i, 1)
For k = 2 To letztezeileSpalteAalpahabetischeListe
If nameReferenzliste = Worksheets("AlphabetischeListe").Cells(k, 1) Then
Worksheets("AlphabetischeListe").Activate
Rows(k).Select
Selection.Copy
Sheets("NeueListe").Select
Worksheets("NeueListe").Rows(m).Select
ActiveSheet.Paste
m = m + 1
End If
Next
Next
End Sub



Ich habe gerade leider nicht die Möglichkeit das auszuprobieren, aber das entspricht genau meinen Vorstellungen!! Neu sortieren, händisch kontrollieren, bzw. wenn die Sortierung stimmt, kann man vielleicht wieder mit filtern arbeiten (einfärben wenn A1<>AndereTabelle!A1) das erleichtert mir das Arbeiten ungemein. Vielen Dank. Ich gebe nochmal ein Feedback, wenn ich es selbst ausprobiert hab! Danke Elumania!!
Hallo,
wenn die Namen mehrfach vorkommen, wie ordnest du zu welcher Eintrag aus Tabelle1 zu welchem Eintrag aus Tabelle2 gehört?
Falls erster Treffer zu erstem Treffer, zweiter Treffer zu zweitem Treffer etc kannst du dir eine Hilfstabelle mit Spaltenkopf und Namensspalte wie in der unsortierten erstellen und den Rest damit zuordnen lassen:
- {=WENNFEHLER(INDEX($G$1:$I$7;KKLEINSTE(WENN($L2=$G$1:$G$7;ZEILE($G$1:$G$7);ZEILEN($G$1:$G$7)+1);ZÄHLENWENN($L$1:L2;$L2));VERGLEICH(M$1;$G$1:$I$1;0));"kein passender Eintrag gefunden")}
- Matrixformel, die geschweiften Klammern {} nicht mit eingeben, sondern die Eingabe über Strg+Umschalt+Enter abschließen
- $G$1:$I$7 = Alphabetische Tabelle, L1:N7 = Hilfstabelle
Die üblichen Verweis()-Formeln wie Vergleich() finden nur den ersten Treffer, daher der Umweg mit KKLeinste() um die Trefferzeile bestimmen zu können.
die namen kommen nicht mehrfach vor, in jeder der tabellen jeweils ein mal.
ah ok, dann hatte ich deinen Kommentar bei IchMalWiederXY missverstanden, aber in dem Fall könntest du es trotzdem verwenden.
Sehe gerade das Elumania eine VBA-Lösung geschrieben hat, damit ist das wohl sowieso erledigt.
wahrscheinlich, aber dank dir trotzdem für deine Mühe! :-)
Abhängig davon "von wo nach wo" Daten abgeglichen werden müssen hängt die Methode ab die man wählt.
Sofern in den eineindeutige Datensätzen IDs vorkommen kann über INDEX(bla;VERGLEICH()) vieles erreicht werden. Aber auch über bedingte Formatierung lassen sich doppelte (mehrfache) finden und hervorheben.
Für weitere Hilfe muss due dies noch etwas besser beschreiben. GGf ein Bildchen, "was mit was" abgeglichen wird.
Hallo IchMalWiederXY
zuerst, ich kann kein bild schicken, da es um vertrauliche Daten geht. Aber du musst dir vorstellen, das sind 2 mehr oder weniger identische Listen mit Personaldaten. Jetzt hat irgendein Scherzkeks eine der beiden Listen nach Alphabet sortiert. Daten die sich über das Jahr geändert haben (das sind zig Spalten, mit Stundenerfassung und ein Haufen mehr, geht halt leider nicht nur um mal ne Adresse aktualisieren) Doppelte hervorheben nützt nix, da die Namen, die ich als Referenz nutzen muss, alle doppelt sind.
Kurzum, wie kann ich diese Sortierung rückgängig machen?
Referenzliste --- Liste die geändert werden soll
Dieter ---------------- Anton
Berta ----------------- Berta
Franz ----------------- Christa
Anton ----------------- Dieter
Christa ---------------- Franz
Irgendeine Idee??
Also mit Namen, die auch doppelt vorkommen können wird es schwierig.
Für eine einigermaßen "Ein-Ein Deutige" Zuordnung müsste dann aus den beiden Listen eine "Hilfs ID" aus: Vorname,Name,Adresse gebildet werden (ggf in einer Hilfsspalte jeweils für die beiden Listen.)
Dann mit SVERWEIS -oder- INDEX(..;VERGLEICH(..;..;..)) die ID der "ersten" Liste in der zweiten suchen und die weiteren Informationen synchronisieren.
Alles was NICHT gefunden wird ist dann ein "einzelner" Datensatz der ersten Liste.
NUN noch prüfen ob jede ID der 2ten Liste in der ersten vorkommt. Sofern dies nicht der Fall ist muss auch dieser 'Einzel' Datensatz in die erste Liste kopiert werden.
Sollte dies öfter vorkommen ist ein Excel Makro die Beste Wahl.
ODER warum nicht auch die Referenz Liste ABC sortieren ?
Hallo Elumania, hab an dem script noch eine modifikation vorgenommen und es läuft astrein, danke nochmal!!