Excel VBA: Spalten in Tabellen sortieren – Schritt-für-Schritt Tutorial

Melden

Hier ist ein ausführliches Tutorial, wie du mit Excel VBA Spalten innerhalb einer Tabelle (ListObject) sortieren kannst.

In Excel gibt es einen großen Unterschied zwischen einem normalen Zellbereich und einer „Intelligenten Tabelle“ (Einfügen -> Tabelle). In diesem Tutorial konzentrieren wir uns auf das Sortieren von Intelligenten Tabellen (ListObjects), da dies die modernste und robusteste Methode in Excel ist.


1. Vorbereitung

Bevor du startest, stelle sicher, dass:

  1. Deine Datei als Excel Arbeitsmappe mit Makros (.xlsm) gespeichert ist.
  2. Die Registerkarte Entwicklertools im Menüband sichtbar ist.
  3. Deine Tabelle einen Namen hat (Klicke in die Tabelle -> Tabellenentwurf -> Tabellenname, z. B. MeineTabelle).

2. Der VBA-Code (Die Standard-Methode)

Dieser Code sortiert eine Tabelle basierend auf einer bestimmten Spalte.

  1. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Gehe auf Einfügen -> Modul.
  3. Kopiere den folgenden Code hinein:
Sub TabelleSortieren()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim sortSpalte As String

    ' Einstellungen: Blattname, Tabellenname und Spaltenname festlegen
    Set ws = ThisWorkbook.Sheets("Tabelle1") ' Name deines Tabellenblatts
    Set tbl = ws.ListObjects("MeineTabelle") ' Name deiner Tabelle
    sortSpalte = "Name" ' Name der Spalte, nach der sortiert werden soll

    ' Vorhandene Sortierung löschen, um Fehler zu vermeiden
    tbl.Sort.SortFields.Clear

    ' Neue Sortierung hinzufügen
    ' Key: Die Daten der Spalte, nach der sortiert wird
    ' Order: xlAscending (Aufsteigend) oder xlDescending (Absteigend)
    tbl.Sort.SortFields.Add2 _
        Key:=tbl.ListColumns(sortSpalte).Range, _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal

    ' Sortierung anwenden
    With tbl.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    MsgBox "Tabelle wurde nach '" & sortSpalte & "' sortiert!", vbInformation
End Sub

3. Erklärung der wichtigsten Befehle

  • tbl.Sort.SortFields.Clear: Bevor du eine neue Sortierung festlegst, musst du alle alten Sortierregeln löschen, sonst stapelt Excel diese übereinander.
  • tbl.ListColumns("Spaltenname").Range: Hier greifst du direkt über den Namen der Spalte auf die Daten zu. Das ist viel sicherer als Zellbezüge wie A2:A100, da sich Tabellen automatisch erweitern.
  • Order:=xlAscending: Dies sortiert von A-Z oder klein nach groß. Nutze xlDescending für Z-A.
  • .Apply: Ohne diesen Befehl wird die Sortierung zwar definiert, aber nicht ausgeführt.

4. Fortgeschritten: Sortieren nach mehreren Spalten

Manchmal möchtest du erst nach "Abteilung" und dann nach "Nachname" sortieren. Das geht so:

Sub MultiSort()
    Dim tbl As ListObject
    Set tbl = ActiveSheet.ListObjects("MeineTabelle")

    With tbl.Sort
        .SortFields.Clear
        ' 1. Priorität: Abteilung (Aufsteigend)
        .SortFields.Add2 Key:=tbl.ListColumns("Abteilung").Range, Order:=xlAscending
        ' 2. Priorität: Nachname (Aufsteigend)
        .SortFields.Add2 Key:=tbl.ListColumns("Nachname").Range, Order:=xlAscending
        .Apply
    End With
End Sub

5. Das Makro ausführen

Du hast mehrere Möglichkeiten, das Makro zu starten:

  1. Schaltfläche erstellen: Gehe zu Entwicklertools -> Einfügen -> Schaltfläche (Formularsteuerelement). Zeichne sie auf das Blatt und weise ihr das Makro TabelleSortieren zu.
  2. Tastenkombination: Drücke ALT + F8, wähle das Makro aus, klicke auf Optionen und vergebe einen Buchstaben (z. B. Strg + Shift + S).
  3. Ereignis-Steuerung: Du kannst den Code auch in das Worksheet_Change Ereignis einbauen, damit die Tabelle sich jedes Mal automatisch sortiert, wenn ein Wert geändert wird.

Häufige Fehler vermeiden

  • Falscher Blattname: Prüfe genau, ob Sheets("Tabelle1") wirklich so heißt.
  • Tabelle ist kein ListObject: Wenn du keine "Intelligente Tabelle" nutzt, wird der Code oben einen Fehler ausgeben. In dem Fall müsstest du Range("A1:C10").Sort... verwenden (was jedoch unflexibler ist).
  • Blattschutz: Wenn das Blatt geschützt ist, kann das Makro nicht sortieren. Du musst den Schutz im Code kurz aufheben (ws.Unprotect) und am Ende wieder setzen (ws.Protect).
0