Excel VBA – Wie Sie Ihre Tabelle mit VBA sortieren
Dieser Beitrag ist ein Teil der VBA Grundlagen Serie.
Ich werde oft gefragt, wie man mit VBA Werte in einer Tabelle sortieren kann. In diesem Beitrag zeige ich Ihnen anhand zweier Beispiele wie es geht.
In der Ausgangstabelle liegen die Umsätze pro Stadt vor.
Stadt | Umsatz |
Berlin | 362 |
Hamburg | 832 |
München | 290 |
Köln | 901 |
Frankfurt | 335 |
Stuttgart | 987 |
Düsseldorf | 257 |
Dortmund | 470 |
Essen | 867 |
Leipzig | 661 |
Wir wollen die Tabelle nach Umsatz und nach dem Namen der Stadt sortieren.
Dazu legen wir zunächst ein neues Makro an.
Zunächst definieren wir die Parameter und legen so fest welcher Bereich sortiert werden soll. Zunächst wollen wir nach Umsatz in der Spalte B sortieren.
Sub SortierenUmsatz()
Dim strSpalte As String
Dim strBereich As String
'Parameter
strBereich = "A1:B11"
strSpalte = "B"
Dazu nutzen wir die Sort
-Methode die einen Bereich mit Werten sortiert. Diese Methode hat eine Reihe von Parametern, von denen wir nur ein Paar nutzen werden. Eine vollständige Auflistung aller Parameter finden Sie in der Microsoft VBA Referenz.
Wir wollen die Umsätze in der Spalte B aufsteigend sortieren. Dazu müssen wir in Key1
das erste Sortierfeld angeben, dieses bestimmt die zu sortierenden Werte. Bei Bedarf können Sie auch mehrere Sortierfelder definieren. Das Sortierfeld kann entweder als Bereichsname oder als Range-Objekt übergeben werden. Wir entscheiden uns zwecks Flexibilität für das Range-Objekt.
Im zweiten Parameter Order1
bestimmen Sie über xlAscending
(aufsteigend) oder xlDescending
(absteigend) die Sortierreihenfolge. Darüber hinaus teilen wir Excel über den Parameter Header
mit, dass unsere Tabelle Überschriften enthält. Wenn Sie hier den Wert xlGuess
verwendet, versucht Excel für Sie zu bestimmen, ob eine Tabelle Überschriften hat oder nicht.
Das vollständige Makro sieht also wie folgt aus:
Sub SortierenUmsatz()
Dim strSpalte As String
Dim strBereich As String
'Parameter
strBereich = "A1:B11"
strSpalte = "B"
'Sortieren
With Tabelle1
Range(strBereich).Sort _
Key1:=Range(strSpalte & "1"), Order1:=xlAscending, _
Header:=xlYes
End With
End Sub
Wie Sie das Makro ausführen, erfolgt die Sortierung nach Umsatz:
Stadt | Umsatz |
Düsseldorf | 257 |
München | 290 |
Frankfurt | 335 |
Berlin | 362 |
Dortmund | 470 |
Leipzig | 661 |
Hamburg | 832 |
Essen | 867 |
Köln | 901 |
Stuttgart | 987 |
111 VBA Makros die Ihr Leben leichter machen
Wollen Sie Ihre langweiligen Routineaufgaben loswerden? Möchten Sie Excel an Ihre Bedürfnisse anpassen, Berechnungen automatisieren, eigene Dialogfelder erstellen und vieles mehr? Dieses Buch zeigt Ihnen, wie Sie Ihre Aufgaben schnell und einfach mit VBA erledigen.
Nun Sie die Städte nach Umsatz aufgelistet.
Nun wollen wir die Städte alphabetisch anordnen. Dabei stelle ich einen neuen Parameter vor. Mit MatchCase
können Sie festlegen, ob Groß-/Kleinschreibung berücksichtigt werden soll.
Für das neue Makro ändern wir einfach den Parameter strSpalte
und fügen MatchCase
hinzu.
Sub SortierenStadt()
Dim strSpalte As String
Dim strBereich As String
'Parameter
strBereich = "A1:B11"
strSpalte = "A"
'Sortieren
With Tabelle1
Range(strBereich).Sort _
Key1:=Range(strSpalte & "1"), Order1:=xlAscending, _
Header:=xlYes, MatchCase:=True
End With
End Sub
Wenn Sie das Makro ausführen, wird die Tabelle aufsteigend nach Städten sortiert.
Stadt | Umsatz |
Berlin | 362 |
Dortmund | 470 |
Düsseldorf | 257 |
Essen | 867 |
Frankfurt | 335 |
Hamburg | 832 |
Köln | 901 |
Leipzig | 661 |
München | 290 |
Stuttgart | 987 |
Die Beispiel Excel Datei mit dem sofort einsetzbaren Makro und 111+ andere Makros, die Ihr Leben leichter machen, finden Sie hier.
Beeindrucke deinen Chef mit coolen Excel Tricks!
- Lasse dich von deinen Kollegen nicht abhängen!
- Spare Zeit und nutze diese für angenehmere Dinge
- Steigere deine Produktivität und Effizienz
- Es ist leicht - In meinem Newsletter gebe ich Schritt für Schritt Anleitungen die jeder versteht
- Bei der Anmeldung zu meinem Newsletter erhälst du das Buch „Excel Tricks die deinen Chef beeindrucken“ als Willkommensgeschenk.

Weiterführende Links:
Range.Sort-Methode
Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.
Bildquelle: Pixabay, CC0 Public Domain
Hallo Denis,
danke für die ausführliche Erklärung. Konnte ich super gebrauchen.
Leider habe ich das Problem, dass in meiner Tabelle welche Spalte A bis N umfasst und nach Spalte M sortiert wird, Spalte N nicht mitsortiert wird sondern einfach stehen bleibt.
Daher die Frage: Wofür steht die „1“ in dieser Code-Zeile:
Key1:=Range(strSpalte & „1“), Order1:=xlAscending, _
Danke und viele Grüße
Friederike
Hallo Dennis,
die Frage von Rike ist sehr Interessant. Das würde ich sehr gerne auch wissen.
Dank und Gruß
Das ist eine Zusammen setzung aus strSpalte was in dem Beispiel „A“ ist und 1 … also ergibt sich daraus die Zelle A1 … Das & in Range ist ein Verknüpfungszeichen
Hallo – vielen Dank für das tolle Makro.
Angenommen ich hätte mehrere Tabellenblätter (Tabelle1, Tabelle2, Tabelle3)
Wie müsste man das Makro ändern, damit es den Umsatz über alle Blätter sortiert?
vielen dank und schöne Grüße Tom