Wie kann ich Excel Formel Ergebnisse sortieren?

...komplette Frage anzeigen

2 Antworten

ich nehme an, das Problem ist, dass Excel beim Sortieren die Formeln nicht verschiebt. Das ginge nur, wenn nicht die Werte, sondern auch die Zellen verschoben werden, und das geht (noch?) nur per Makro.
Ich hab da was geschrieben, das sortiert nach der ERSTEN Spalte einer ggf. mehrspaltigen, vielzeiligen Auswahl (kein zweit- und dritt-Kriterium) und nur Zahlenergebnisse.
Dabei schneidet es die markierten Zellen aus und setzt sie ganz oben wieder ein (schiebt dabei alles dazwischen eins nach unten.
Hinterher kannst du den Ergebnisblock wieder manuell nach unten schieben und die obersten Zeilen löschen oder den Block mit den Bezügen nach oben, wie du willst.

Basis ist die markierte Auswahl, wobei die erste Zelle LEER sein muss. Die Reihenfolge ist nach unten steigend, es kann aber umgepolt werden. (Anweisung dazu als µ-Kommentar)
Übe einfach ein bisschen mit einem einfachen Modell, mich hat das Erstellen auch zwei Stunden gekostet, dabei hatte ich schon eine Vorarbeit in petto. War aber eine lehrreiche Aufgabe!
Ich hab auch eine Modifikation, die ganze Zeilen versetzt, aber das hast Du ja nicht gefragt.
Hier das Makro:

Sub OrdnenSelMehrspaltigMaxUnten() 'Leitspalte links! ordnet Bereiche unter Aufrechterhaltung der Bezüge ' es tutet!
Dim Maxbereich As Range, MaxWert, MaxZell 'ggf alle Máx durch Mín ersetzen bzw umgekehrt (mit Mín könnte am Ende ein Fehler auftreten! einfach beenden, ist alles gelaufen!)
If Selection.Cells(1) <> "" Then MsgBox "die erste Zelle der Auswahl MUSS leer sein!": Exit Sub
Set Maxbereich = Selection
Do
On Error GoTo 0 'hebt On Error Resume Next wieder auf schickt xl bei Fehler ins Nirwana = FEHLER mit Meldung
MaxWert = Application.Worksheetfunction.Max(Maxbereich.Columns(1)) 'beachte Funktionsrückgabe MaxWert = !!! (wie bei input-box!
MaxZell = Application.Worksheetfunction.Match(MaxWert, Maxbereich.Columns(1), 0) 'Match = Fkt. Vergleich, Max=7, ist in 4.Zelle Maxbereich MsgBox MaxZell
Range(Chr(Maxbereich.Column + 64) & Maxbereich.Row + MaxZell - 1 & ":" & Chr(Maxbereich.Column + Maxbereich.Columns.Count + 63) & Maxbereich.Row + MaxZell - 1).Select
Selection.Cut
ActiveSheet.Rows("1:1").Cells(Maxbereich.Column).Select '<<bringt die ausgeschittenen Zellen ganz nach oben!
Selection.Insert Shift:=xlDown 'das Shift:=xlDown führt z.Löschung d.Zeile (2 Befehle vorher! u.z.Schaffung e.neuen am Einsetz-Ort)
On Error Resume Next 'wenn i.d.folgenden Zeilen keine gefüllte Zelle mehr, muss e.Fehler samt Meldung unterdrückt werden.
Loop Until Maxbereich.SpecialCells(xlCellTypeConstants).Count = 0
End Sub 'Einschränkg: geht nur für Bezüge auf Einzelzellen, nicht auf Bereiche!

Iamiam 15.03.2012, 00:37

zum Installieren des Makros kopierst du ab incl. Sub... bis ganz nach unten.
Dann gehst Du in Deine Datei, Rechtsklick auf die Blattnamensfahne unten, im Kontext-Menü "Code anzeigen" wählen.
Es öffnet sich der VBA-Editor.
Dort im Menü Einfügen "Modul" wählen, es erscheint ein leeres Modulblatt, wahrscheinlich steht oben Option Explizit (das heisst, dass du zur Vermeidung von Schreibfehlern die Variablen da drin deklarieren = anmelden musst. (wenn nicht, schadet es hier auch nicht, sie sind angemeldet)
Unterhalb davon den Inhalt der Zwischenablage einfügen.
Nun gehst Du in Dein Arbeitsblatt (speicherst am besten schon mal) und markierst den Bereich, den Du sortieren willst. Solltest Du einen mehrspaltigen Bereich sortieren wollen, achte drauf, dass die Leitspalte links ist.
Mit Makros anzeigen (ggf in die Symbolleiste für den Schnellzugriff schieben über Symbolleisten anpassen) siehst Du das Makro in m Dialogfeld, ggf aus mehreren auswählen und ausführen. Viel Erfolg!

0
Iamiam 15.03.2012, 22:58
@Iamiam

Noch ne Einschränkung:
wenn die Funktion =Zeile() oder =Zelle("Zeile";Bezug auf eine mitsortierte Zelle) oder sowas ähnliches vorkommt, versagt das Makro aus Prinzip: Beim Verschieben der Zellen wird ja die Zeile geändert!

Verdächtig sind auch die Funktionen =Vergleich(was, wo,Typ) und die damit oft verbundene Index-Formel, ggf.der S- & der HVerweis, die indirekte Adressierung, Rang und sicher noch ein paar andere.

Also mit Verstand anwenden!

0

Ein bisschen ist es durcheinander. Ich gehe mal davon aus, dass die 4 in B1! steht.
Dann diese Formel in B2 und runterkopieren:

=KGRÖSSTE($A$2:$A$5;ZEILE(A1))

Klappt es?

Was möchtest Du wissen?