Hallo Namenloser,
also das Sortieren ist nicht so das Problem. Allerdings das Rückgängigmachen. Anders als wenn Du das per Hand machst und dann die Rückgängigfunktion dazu verwenden kannst, geht das nach einem Makrodurchlauf nicht mehr.
Ich habe da mal eine Lösung erarbeitet, die vor dem Sortieren die alten Daten in einer Hilfsspalte durchnummeriert. Über diese Nummerierung kann man dann durch Sortieren dieser Spalte die Sortierung wieder rückgängig machen. Die Hilfsspalte (in meinem Beispiel die Spalte J) wird durch das Makro ausgeblendet, so dass die Durchnummerierung nicht sichtbar ist.
Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.
Option Explicit
Dim lngLastRow As Long
Sub Sortieren()
With ActiveSheet
'Letzte Zeile in Spalte D ermitteln
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
'Spalte J als Hilfsspalte vorbereiten...
With .Columns("J:J")
'...Spalte ausbelenden
.EntireColumn.Hidden = True
'...alle Einträge in Spalte löschen
.ClearContents
End With
'In Zeile 2 der Hilfsspalte die Zahl eintragen
.Range("J2").FormulaR1C1 = "1"
'In Zeile 3 der Hilfsspalte die Zahl eintragen
.Range("J3").FormulaR1C1 = "2"
'Von Zeile 3 bis zur letzten Zeile über die Auoausfüllen-Funktion die Zeilen durchnummerieren
.Range("J2:J3").AutoFill Destination:=.Range("J2:J" & lngLastRow), Type:=xlFillDefault
'Daten nach Spalte D und Spalte E sortieren
.Range("A1:J" & lngLastRow).Sort Key1:=.Range("D2"), Order1:=xlAscending, Key2:=.Range("E2") _
, Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False _
, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
xlSortNormal
End With
End Sub
Sub Sortieren_zurück()
With ActiveSheet
'Letzte Zeile in Spalte D ermitteln
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
'Daten nach Hilfsspalte sortieren
.Range("A1:J" & lngLastRow).Sort Key1:=.Range("J2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'alle Einträge in Hilfsspalte löschen
.Columns("J:J").ClearContents
End With
End SubWenn Du die Durchnummerierung nicht in Spalte "J" haben möchtest, wovon ich mal ausgehe, so musst Du in dem Makro alle Spaltenbezeichnungen "J" gegen die Spaltenbezeichnung, in der Du die Hilfsspalte haben möchtest, ändern.
Ich habe Dir auch mal mein Beispiel hochgeladen. ]
http://www.excelbeispiele.de/beispiele_supportnet/Beispiel_Dutchi1972.xls
Ich hoffe, Dir hilft das Beispiel. Eine andere Möglichkeit wäre z.B. das alte Filterergebnis durch ein Makro zunächst in eine Textdatei zu exportieren und beim zurück wieder die Daten aus der Textdatei zu importieren und die sortierten Daten zu überschreiben. Aber obiges macht‘s ja auch erst mal.
MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup