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:
- Deine Datei als Excel Arbeitsmappe mit Makros (.xlsm) gespeichert ist.
- Die Registerkarte Entwicklertools im Menüband sichtbar ist.
- 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.
- Drücke
ALT + F11, um den VBA-Editor zu öffnen. - Gehe auf
Einfügen->Modul. - 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 wieA2:A100, da sich Tabellen automatisch erweitern.Order:=xlAscending: Dies sortiert von A-Z oder klein nach groß. NutzexlDescendingfü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:
- Schaltfläche erstellen: Gehe zu
Entwicklertools->Einfügen->Schaltfläche (Formularsteuerelement). Zeichne sie auf das Blatt und weise ihr das MakroTabelleSortierenzu. - Tastenkombination: Drücke
ALT + F8, wähle das Makro aus, klicke aufOptionenund vergebe einen Buchstaben (z. B.Strg + Shift + S). - Ereignis-Steuerung: Du kannst den Code auch in das
Worksheet_ChangeEreignis 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).