Excel VBA: Daten sortieren mit Makros – Das komplette Tutorial
Hier ist ein umfassendes Tutorial, wie du Daten in Excel mithilfe von VBA sortierst.
Das Sortieren von Daten gehört zu den häufigsten Aufgaben in Excel. Während man dies manuell mit wenigen Klicks erledigen kann, spart ein VBA-Makro besonders bei wiederkehrenden Aufgaben oder großen Datensätzen viel Zeit.
In diesem Tutorial lernst du zwei Methoden: Die einfache Methode (für schnelle Aufgaben) und die professionelle Methode (über das Sort-Objekt).
1. Vorbereitung: Den VBA-Editor öffnen
Bevor du startest, stelle sicher, dass die Registerkarte Entwicklertools in Excel sichtbar ist.
- Drücke
ALT+F11, um den VBA-Editor zu öffnen. - Gehe auf
Einfügen>Modul. Ein leeres Fenster für deinen Code erscheint.
2. Methode 1: Die schnelle Variante (Range.Sort)
Diese Methode ist kurz und ideal für einfache Tabellen.
Der Code:
Sub EinfachesSortieren()
' Daten im Bereich A1 bis C10 sortieren
' Key1: Spalte, nach der sortiert wird (hier Spalte A)
' Order1: Aufsteigend (xlAscending) oder Absteigend (xlDescending)
' Header: Gibt an, ob Überschriften vorhanden sind
Range("A1:C10").Sort Key1:=Range("A1"), _
Order1:=xlAscending, _
Header:=xlYes
End Sub
Erklärung:
Key1: Die Spalte, die als Sortierkriterium dient.Header:=xlYes: Verhindert, dass die Überschrift mit in die Sortierung rutscht.
3. Methode 2: Die professionelle Variante (Sort-Objekt)
Seit Excel 2007 gibt es das Sort-Objekt. Es ist etwas schreibintensiver, aber viel flexibler (z. B. für Sortierungen nach Farben oder mehreren Ebenen).
Der Code:
Sub ProfessionellesSortieren()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Tabelle1") ' Name deiner Tabelle anpassen
' 1. Bestehende Sortiereinstellungen löschen
ws.Sort.SortFields.Clear
' 2. Sortierkriterium hinzufügen (Spalte A, aufsteigend)
ws.Sort.SortFields.Add Key:=Range("A2:A100"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
' 3. Den gesamten Bereich festlegen und Sortierung anwenden
With ws.Sort
.SetRange Range("A1:C100") ' Der gesamte Datenbereich inkl. Header
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Vorteile dieser Methode:
- Du kannst problemlos nach mehreren Spalten sortieren (einfach ein weiteres
SortFields.Addhinzufügen). - Sie ist robuster bei großen Datenmengen.
4. Sortieren über mehrere Ebenen
Oft möchte man erst nach "Nachname" und dann nach "Vorname" sortieren. So erweiterst du den Code:
Sub MultiLevelSort()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Sort.SortFields.Clear
' Ebene 1: Spalte A (z.B. Nachname)
ws.Sort.SortFields.Add Key:=Range("A2"), Order:=xlAscending
' Ebene 2: Spalte B (z.B. Vorname)
ws.Sort.SortFields.Add Key:=Range("B2"), Order:=xlAscending
With ws.Sort
.SetRange Range("A1:D100")
.Header = xlYes
.Apply
End With
End Sub
5. Dynamische Bereiche (Profi-Tipp)
In der Praxis weiß man oft nicht, wie viele Zeilen die Tabelle hat. So machst du den Bereich dynamisch:
Sub DynamischSortieren()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ActiveSheet
' Letzte belegte Zeile in Spalte A finden
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Sortierung auf dynamischen Bereich anwenden
ws.Range("A1:C" & lastRow).Sort Key1:=ws.Range("A1"), Order1:=xlAscending, Header:=xlYes
End Sub
Zusammenfassung: Welchen Befehl soll ich nutzen?
| Situation | Empfohlene Methode |
|---|---|
| Ganz schnell & simpel | Range.Sort (Methode 1) |
| Mehrere Spalten / Kriterien | Sort.SortFields (Methode 2) |
| Unbekannte Zeilenanzahl | Dynamischer Bereich mit lastRow |
So testest du das Makro:
- Kopiere einen der Codes in dein VBA-Modul.
- Gehe zurück zu Excel.
- Drücke
ALT+F8, wähle das Makro aus und klicke auf Ausführen.
Hinweis: Denke daran, deine Datei als Excel-Arbeitsmappe mit Makros (.xlsm) zu speichern, damit der Code nicht verloren geht!