16.05.2020, 22:25
@Kuwer,
Du bezeichnest Arraylist mit 'Collection' ?
Du bezeichnest Arraylist mit 'Collection' ?
![]() Forum des Excel-Verein 2015 e.V. |
Das Clever-Excel-Forum-Treffen
findet vom 19.09. - 21.09.2025 in Bad Arolsen statt. Zu den Infos kommt Ihr oben über den Link. |
Daten in Matrixform aufsteigend sortieren
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.05.2020, 22:25
@Kuwer,
Du bezeichnest Arraylist mit 'Collection' ?
16.05.2020, 22:40
17.05.2020, 17:07
Mein Deutsch ist offensichtlich ausreichend.... :28:
17.05.2020, 17:14
Kuwer hatte Arraylist in seinem Vergleich, bevor Du Dich (mit collection) erstmals gemeldet hast, snb. Dann kann er das schlecht meinen.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel).
Und was bringt das normale Sortieren in Excel ?
Code: Sub M_snb()
Sub Formelsortierung() 'Sortiert mit ,,-1)," absteigend, mit )," aufsteigend (dritte Formelzeile)
On Error Resume Next: ActiveWorkbook.Names("ii").Delete [L1].Clear: A = Timer ActiveWorkbook.Names.Add Name:="ii", RefersToR1C1:="=MatrixBlatt!R1C1:R20000C10" [L1].Formula2R1C1 = "=INDEX(SORT(INDEX(ii,(" & Chr(10) & _ "SEQUENCE(ROWS(ii)*COLUMNS(ii),,COLUMNS(ii)))/COLUMNS(ii),MOD(" & Chr(10) & _ "SEQUENCE(ROWS(ii)*COLUMNS(ii),,COLUMNS(ii)),COLUMNS(ii))+1),,-1)," & Chr(10) & _ "SEQUENCE(ROWS(ii),,0)*COLUMNS(ii)+MOD(SEQUENCE(,COLUMNS(ii),0),COLUMNS(ii))+1)" MsgBox Timer - A ' Ersetze die letzte Formelzeile für ' Telefonbuchsortierung: ' "SEQUENCE(,COLUMNS(ii),0)*ROWS(ii)+MOD(SEQUENCE(ROWS(ii),,0),ROWS(ii))+1)" ' Leserichtung-Sort: ' "SEQUENCE(ROWS(ii),,0)*COLUMNS(ii)+MOD(SEQUENCE(,COLUMNS(ii),0),COLUMNS(ii))+1)" End Sub kommt auf meinem I5 - 8GB - Surface 6 auf 1,2 - 2,7 Sekunden (Kuwers Datei, 200.000 Einträge) _____________________________________________________________________ Die Formel #13 (die dem Code zugrunde liegt) hatte ich aus Versehen falsch umgebrochen, so dass sie nicht funktionierte. Richtig: =INDEX(SORTIEREN(INDEX(ii;( SEQUENZ(ZEILEN(ii)*SPALTEN(ii);;SPALTEN(ii)))/SPALTEN(ii);REST( SEQUENZ(ZEILEN(ii)*SPALTEN(ii);;SPALTEN(ii));SPALTEN(ii))+1)); SEQUENZ(ZEILEN(ii);;0)*SPALTEN(ii)+REST(SEQUENZ(;SPALTEN(ii);0);SPALTEN(ii))+1)
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel).
17.05.2020, 22:23
(Dieser Beitrag wurde zuletzt bearbeitet: 17.05.2020, 23:58 von Kuwer.
Bearbeitungsgrund: Werte berichtigt
)
Hallo snb,
das normale Sortieren hatte ich unter dem Namen TabSort schon mit drin (siehe #10). Das ist schneller als ich vermutete. Ich hatte da aber noch zwei unnötige Schleifen drin, die nun durch (Deine) Modulo-Schleifen nicht mehr nötig sind. Das macht es nochmals um einiges schneller. Übrigens ist Deine Version im selben Blatt langsamer als in einer neuen Datei. Hier das Makro mit normaler Excelsortierung: Sub Sort_Matrix_Tabellenblatt_Kuwer()Hier noch mal ein Vergleich: Vergleich
LCohens Variante kann ich leider mit meiner Excelversion nicht testen. Gruß Uwe
Ola Uwe:
Danke für's testen. Meiner letzte Vorschlag kann schneller werden mit: Code: Sub M_snb() Es gibt noch eine Methode: sortedlist (ich fürchte viel langsamer) Code: Sub snb_sortedlist()
18.05.2020, 00:12
(17.05.2020, 23:14)snb schrieb: Es gibt noch eine Methode: sortedlist (ich fürchte viel langsamer) Deine Befürchtung hat sich bewahrheitet: 29,5 Sekunden für 100000x10 Zellen. ![]() Das Umschalten auf manuelle Berechnung bringt bei mir nichts. Es geht ja aber auch nicht um die absoluten Zeiten, sondern den Vergleich der Methoden zueinander. Gruß Uwe
Meine #26 habe ich jetzt auch mit 100.000 x 10 Zellen gemessen:
020.000 x 10 Zellen: ca. 1,2 bis 2,7 Sekunden 100.000 x 10 Zellen: ca. 5,2 bis 6,1 Sekunden (Surface 6 - i5 - 8GB RAM - nur SSD, kein HD) Es sind 4 Sortierungen im Code einstellbar (dort kommentiert): 1 2 3 4 5 6 Leserichtung aufsteigend 6 5 4 3 2 1 Leserichtung absteigend 1 3 5 2 4 6 Telefonbuch aufsteigend 6 4 2 5 3 1 Telefonbuch absteigend Übrigens, in Ansicht des snb-Codes: Bei mir ist nix mit ScreenUpdating = False (und nicht wieder True)! Ganz normales Formel-Eintragen. ScreenUpdating ist somit normal als "True" enthalten, müsste man für den Vergleich also noch abziehen. Das gleiche gilt für Calculation. Ganz normal auf "Automatisch". Nachteil meiner Lösung: Bei 104.857 x 10 ist Schluss, da Excel nur 1.048.576 Zeilen hat und der innere INDEX aus dem Bereich eine einzelne Sortierspalte erstellt, die nicht länger sein kann, als die Tabelle. Das müsste bei RPP63 ("Formelsort") auch so sein; die anderen Lösungen mit VBA-Sort hingegen sind nicht an dieser Grenze beschränkt (sondern erst später).
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel).
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|