AW: Excel VBA sortieren
05.07.2021 16:47:11
Daniel
Hi
wie man mit zwei- oder mehr Sortierkriterien sortiert, sollte dir der Recorder zeigen, einfach mal zwei Sortierkriterien auswählen und aufzeichnen.
sollte das nicht funktionieren, kann man auch einfach nacheinander nach jedem Kriterium einzeln sortieren.
Man muss dabei mit dem niederwertigsten Sortierkriterium beginnen und mit dem höchstwertigen aufhören (also zuerst nach B und danach nach A)
Aufgezeichneter Code muss immer überarbeitet werden.
Beim Sortieren musst du an zwei Stellen noch das Tabellenblatt bzw Workbook und Tabellenblatt einfügen, da hier der Recorder nur die Range alleine aufzeichnet und sich dann immer auf das aktive Tabellenblatt bezieht. die zwei Stellen wären:
- Key:
- SetRange
Sub Sortieren()
' Sortieren Makro
Range("A2:D51").Select
ActiveWorkbook.Worksheets("Tabelle2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle2").Sort.SortFields.Add2 Key:=ActiveWorkbook.Worksheets("Tabelle2").Range( _
"A2:A51"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle2").Sort
.SetRange ActiveWorkbook.Worksheets("Tabelle2").Range("A1:D51")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
oder man schreibt sich die das ganze gleich vernünftig um, so dass man die WITH-Klammer auch sinnvoll nutzen kann:
With ActiveWorkbook.Worksheets("Tabelle2")
.Sort.SortFields.Clear
.Sort.SortFields.Add2 Key:=.Range("A2:A51"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SetRange .Range("A1:D51")
.Sort.Header = xlYes
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
End With
Gruß Daniel