Clever-Excel-Forum

Normale Version: Daten in Matrixform aufsteigend sortieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
Hallo zusammen,
ich habe ein Excel Tabellenblatt mit vielen Begriffen in fünf Spalten.

Ich möchte diese Matrix nun fortlaufend sortieren. Beispiel:

Apfel - Birne - Clementine - Dattel - Erdbeere
Feige - Gurke - Holunder - Indien - Jute
Kaki - Limette - usw

Also alphabetisch aufsteigend über die Zeilen-/Spaltengrenzen hinweg.

Gibt es dafür eine eingebaute Excel-Funktion?
Oder kann man es mit Formeln lösen?
Zur Not mit VBA?

Viele Grüße
Max
Hallöchen,

bei den Sortieroptionen kannst Du zwischen Zeilen und Spalten wechseln.
[attachment=31747]
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.

Ich bin da echt ratlos...

Viele Grüße
Max
Hallo Max,

wozu auch immer das gut sein soll, mit Bordmitteln wird das nicht gehen, weil in Excel der Grundsatz: eine Zeile - ein Datensatz gilt.
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.

Also doch VBA Sadsmiley

Viele Grüße
Max
Hallo Max,


VBA ist ja im Prinzip nichts schlechtes. Sind es immer 5 Spalten? Wie viele Zeilen können das maximal sein?
Hallo Max,

so z.B. mit VBA (markiere den Sortierbereich vorher):

Option Explicit

Sub SortKuwer()
  Dim i As Long, j As Long, k As Long
  Dim varB As Variant, varS As Variant
 
  'varB = Range("Bereich").Value
  varB = Selection.Value
  ReDim varS(1 To UBound(varB, 1) * UBound(varB, 2))
 
  For i = 1 To UBound(varB, 1)
    For j = 1 To UBound(varB, 2)
      k = k + 1
      varS(k) = varB(i, j)
    Next j
  Next i
 
  QuickSort_Feld varS, 1, UBound(varS), False
 
  k = 0
  For i = 1 To UBound(varB, 1)
    For j = 1 To UBound(varB, 2)
      k = k + 1
      varB(i, j) = varS(k)
    Next j
  Next i

  Selection.Offset(, 11).Value = varB
'  Range("Bereich").Offset(,11).Value = varB
End Sub

Private Sub QuickSort_Feld(DasFeld, StartUnten, EndeOben, Absteigend As Boolean)
  'QuickSort Standard
  'https://www.online-excel.de/excel/singsel_vba.php?f=24
  Dim iUnten As Long, iOben, iMitte, y
  iUnten = StartUnten
  iOben = EndeOben
  iMitte = DasFeld((StartUnten + EndeOben) / 2)
  While (iUnten <= iOben)
    If Not Absteigend Then
      While (DasFeld(iUnten) < iMitte And iUnten < EndeOben)
        iUnten = iUnten + 1
      Wend
      While (iMitte < DasFeld(iOben) And iOben > StartUnten)
        iOben = iOben - 1
      Wend
    Else
      While (DasFeld(iUnten) > iMitte And iUnten < EndeOben)
        iUnten = iUnten + 1
      Wend
      While (iMitte > DasFeld(iOben) And iOben > StartUnten)
      iOben = iOben - 1
      Wend
    End If
    If (iUnten <= iOben) Then
      y = DasFeld(iUnten)
      DasFeld(iUnten) = DasFeld(iOben)
      DasFeld(iOben) = y
      iUnten = iUnten + 1
      iOben = iOben - 1
    End If
  Wend
  If (StartUnten < iOben) Then
    Call QuickSort_Feld(DasFeld, StartUnten, iOben, Absteigend)
  End If
  If (iUnten < EndeOben) Then
    Call QuickSort_Feld(DasFeld, iUnten, EndeOben, Absteigend)
  End If
End Sub

Code eingefügt mit: Excel Code Jeanie

Gruß Uwe
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, 08: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
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:
1000 Zellen:

0,06640625 (FormelSort)
0,0625    (FormelSort)
0,06640625 (FormelSort)
0,06640625 (QuickSort)
0,0703125  (QuickSort)
0,05859375 (QuickSort)
0,12109375 (TabSort)
0,1171875  (TabSort)
0,12109375 (TabSort)

200000 Zellen:

3,53125    (FormelSort)
3,39453125 (FormelSort)
3,37890625 (FormelSort)
2,59765625 (QuickSort)
2,5078125  (QuickSort)
2,890625  (QuickSort)
2,35546875 (TabSort)
2,1953125  (TabSort)
2,2890625  (TabSort)
Gruß Uwe
Seiten: 1 2 3 4