Excel VBA: Daten sortieren mit Makros – Das komplette Tutorial

Melden

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.

  1. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. 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.Add hinzufü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:

  1. Kopiere einen der Codes in dein VBA-Modul.
  2. Gehe zurück zu Excel.
  3. 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!

0