Ja, danke für die Info. Aber bei dieser Einstellung wird dann wieder nur innerhalb einer Zeile sortiert. Ich möchte folgendes erreichen:
Ausgangsmatrix:
D F A T L M B C X G H E U R S
Zielmatrix: A B C D E F G H L M R S T U X
Das gelingt weder mit spalten- noch zeilenweiser Sortierung. Vom Prinzip her müsste man zuerst alle Einträge in eine große Liste schreiben und diese Liste dann sortieren. Die sortierte Liste müsste dann "nur" noch (ähnlich wie bei einem Drucker) zeilenweise von links nach rechts als Matrix ausgegeben werden.
Hat Excel wirklich keine Bord-Tools, um eine Matrix in eine Liste zu überführen oder eine Liste als Matrix darzustellen? Sortieren kann Excel ja mit Bordmitteln.
Hallo Klaus-Dieter, vielen Dank für die Aufklärung, das war mir bisher so noch nicht bewusst.
Allerdings bin ich trotzdem überrascht, dass Excel diese (in meinen Augen doch recht simple) Funktion des Sortierens einer ungeordneten Matrix nicht beherrscht. Nun gut, die Entwickler werden Ihre Gründe haben.
16.05.2020, 09:29 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2020, 09:59 von RPP63.)
Moin! Warum nicht einfach mit Bordmitteln (Formeln und sortieren)? Mein Makro bezieht sich auf die Ausgangsmatrix A1:E3 und benutzt eine temporäre Hilfsmatrix S1:S15 (3 Zeilen * 5 Spalten = 15). Es kann aber problemlos auf jedwede Ausgangsmatrix angepasst werden.
Sub Sort_special() With Range("S1:S15") .Formula = "=INDEX($A$1:$E$3,ROW(X5)/5,MOD(ROW(X5),5)+1)" .Value = .Value .Sort Range("S1") End With With Range("A1:E3") .Formula = "=INDEX($S$1:$S$15,ROW(X1)*5+COLUMN(A9)-5)" .Value = .Value End With Range("S1:S15").Clear End Sub
Irgendwie schlank, gelle? :19:
Gruß Ralf
(16.05.2020, 09:29)RPP63 schrieb: Es kann aber problemlos auf jedwede Ausgangsmatrix angepasst werden.
Was ich hier mal umgesetzt habe. Beliebigen Bereich markieren und AufGehts starten:
Sub AufGehts() If TypeName(Selection) = "Range" Then Sort_Matrix_RPP Selection End Sub
Sub Sort_Matrix_RPP(Bereich As Range) Dim Zeilen&, Spalten& Zeilen = Bereich.Rows.Count Spalten = Bereich.Columns.Count With Range("XFD1").Resize(Zeilen * Spalten) .Formula = _ "=INDEX(" & Bereich.Address & _ ",ROW(X" & Spalten & _ ")/" & Spalten & _ ",MOD(ROW(X" & Spalten & _ ")," & Spalten & _ ")+1)" .Value = .Value .Sort Range("XFD1") End With With Bereich .Formula = _ "=INDEX(" & Range("XFD1").Resize(Zeilen * Spalten).Address & _ ",ROW(X1)*" & Spalten & _ "+COLUMN(A9)-" & Spalten & ")" .Value = .Value End With Range("XFD1").Resize(Zeilen * Spalten).Clear End Sub
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
16.05.2020, 13:11 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2020, 13:14 von Kuwer.)
Hallo zusammen,
ich habe mal eine Testmappe erstellt mit drei verschiedenen Sortiermethoden: QuickSort, per Formeln wie von Ralf gezeigt und noch ein normales Sortieren in einem Blatt eines neuen temporären Workbooks. Es wird ein Bereich von 10 Spalten mit einmal 100 und einmal 20000 Zeilen sortiert neben diesem Bereich zurückgeschrieben (zum bsseren Vergleich). Das sind meine Vergleichsergebnisse in Sekunden: