Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Daten in Matrixform aufsteigend sortieren
#1
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
Antwortento top
#2
Hallöchen,

bei den Sortieroptionen kannst Du zwischen Zeilen und Spalten wechseln.
   
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
[-] Folgende(r) 1 Benutzer sagt Danke an schauan für diesen Beitrag:
  • Max2713
Antwortento top
#3
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
Antwortento top
#4
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.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Benutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • Max2713
Antwortento top
#5
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
Antwortento top
#6
Hallo Max,


VBA ist ja im Prinzip nichts schlechtes. Sind es immer 5 Spalten? Wie viele Zeilen können das maximal sein?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antwortento top
#7
Hilft eine Formel?

https://www.herber.de/excelformeln/pages...geben.html
Raoul
Antwortento top
#8
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
Antwortento top
#9
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
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)
Antwortento top
#10
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


Angehängte Dateien
.xlsm   MatrixSortieren.xlsm (Größe: 1,71 MB / Downloads: 11)
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste