Mit VBA spezielle Excel Sortierung?

4 Antworten

Du hast geschrieben du hast zwei Listen. Ändere doch einfach beide Listen alphabetisch?

Schritt 1 unsortiert:

Bild zum Beitrag

Dann habe ich jeweils die Spalte Name markiert und bin auf Sortieren und Filtern gegangen - von A bis Z sortieren.

Bild zum Beitrag

Fertig.

 - (Computer, Microsoft Excel, VBA)  - (Computer, Microsoft Excel, VBA)
DanKirpan  01.06.2021, 09:39

Das wäre natürlich die einfachste Variante, aber der FS hat dies bereits explizit ausgeschlossen gehabt.

1
stroiner123 
Fragesteller
 01.06.2021, 13:04

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.

0
Von Experte DanKirpan bestätigt

Mit VBA: Es gibt 3 Tabellenblätter:

Blatt1 hat den Namen "Alphabetische Liste". Name steht in Feld A1.

Bild zum Beitrag

Blatt2 hat den Namen "Referenzliste". Name steht in Feld A1.

Bild zum Beitrag

Weiterhin muss ein Tabellenblatt "NeueListe" angeordnet werden. Nach Ausführung meines Codes wird folgende Tabelle erstellt:

Thorsten steht dabei dann in Feld A2.

Bild zum Beitrag

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
 - (Computer, Microsoft Excel, VBA)  - (Computer, Microsoft Excel, VBA)  - (Computer, Microsoft Excel, VBA)
stroiner123 
Fragesteller
 01.06.2021, 13:22

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

1
stroiner123 
Fragesteller
 05.06.2021, 13:43

Hallo Elumania, hab an dem script noch eine modifikation vorgenommen und es läuft astrein, danke nochmal!!

1

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.

stroiner123 
Fragesteller
 01.06.2021, 13:21

die namen kommen nicht mehrfach vor, in jeder der tabellen jeweils ein mal.

0
DanKirpan  01.06.2021, 13:45
@stroiner123

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.

0
stroiner123 
Fragesteller
 01.06.2021, 13:58
@DanKirpan

wahrscheinlich, aber dank dir trotzdem für deine Mühe! :-)

0

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.

stroiner123 
Fragesteller
 01.06.2021, 08:22

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

0
IchMalWiederXY  01.06.2021, 19:36
@stroiner123

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 ?

0