Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

aufsteigend sortieren, aber Leerzellen ans Ende

Forumthread: aufsteigend sortieren, aber Leerzellen ans Ende

aufsteigend sortieren, aber Leerzellen ans Ende
27.10.2003 14:36:46
Jürgen
Hallo Leute,
ich habe eine Tabelle mit verknüpften Werten aus einer anderen Tabelle.
Einen speziellen Bereich dieser Tabelle möchte ich per VBA automatisch beim öffnen aufsteigend sortieren, wobei aber die Leerzellen ans Ende des Sortierbereichs gestellt werden sollen.
Habs mit folgendem Code versucht:

Sub SortierenAufsteigend()
Worksheets("kurz").Range("A7:K47").Sort Key1:=Range("A7"), _
Order1:=xlAscending, Header:=xlYes, MatchCase:=False, OrderCustom:=1,
Orientation:=xlTopToBottom
End Sub


so stellt er mir die Leerzeilen an den Anfang
Weiß jemand Rat??
Vielen Dank im voraus.
Gruß Jürgen
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: aufsteigend sortieren, aber Leerzellen ans Ende
27.10.2003 15:42:57
WernerB.
Hallo Jürgen,

kopiere den nachstehenden Code in das Modul von "DieseArbeitsmappe", dann sollte es klappen:

Private Sub Workbook_Open()
With Worksheets("kurz")
.Range("A7:K47").Sort Key1:=.Range("A7"), _
Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
End With
End Sub

Viel Erfolg wünscht
WernerB.

P.S.: Das Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter (siehe Forums-FAQ).
Anzeige
AW: aufsteigend sortieren, aber Leerzellen ans Ende
27.10.2003 16:30:22
Jürgen
Hi Werner,
zunächst vielen Dank für Deine schnelle Antwort.
Hab den Code in "Diese Arbeitsmappe" eingefügt und die Mappe erneut geöffnet.
Resultat: Der Bereich wurde automatisch sortiert, aber die Leerzeilen stehen wieder
am Anfang und nicht, wie erwünscht am Ende des Bereiches.
Gibt es zu diesem Problem eine Lösung??
Danke und Grüße
Jürgen
Anzeige
AW: aufsteigend sortieren, aber Leerzellen ans Ende
28.10.2003 07:33:39
WernerB.
Hallo Jürgen,

offenbar handelt es sich bei den "leeren" Zellen der Spalte "A" nicht um tatsächlich leere Zellen, sondern um solche, die Formeln beinhalten, die den Wert "0" zurückliefern; dabei hast Du die Null-Anzeige ausgeblendet.
Wenn dem so ist, dann sollte dieses Makro funktionieren:

Private Sub Workbook_Open()
Dim i As Integer, laR As Integer
Application.ScreenUpdating = False
With Worksheets("kurz")
.Range("A7:K47").Sort Key1:=.Range("A7"), _
Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
laR = 47
For i = 47 To 1 Step -1
If .Cells(i, 1).Text <> "" Then
laR = i
Exit For
End If
Next i
.Range("A7:K" & laR).Sort Key1:=.Range("A7"), _
Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
Application.ScreenUpdating = True
End With
End Sub

Gruß WernerB.
Anzeige
Vielen Dank! noch ne klein Frage:)
28.10.2003 09:20:30
Jürgen
Hi Werner,
zunächst nochmals vielen Dank. Dieser Code löst genau meine Aufgabe!
Meine Frage ist jetzt noch: Ich muss diese Sortierfunktion in der Tabelle für 12 verschiedene Bereiche beim Starten durchführen. Muss ich den Code 12mal mit den jeweilgen Range-Angaben eingeben oder gibt es da eine kürzere Variante?
Gruß Jürgen
Anzeige
AW: Vielen Dank! noch ne klein Frage:)
28.10.2003 12:35:39
WernerB.
Hallo Jürgen,

ohne Dein Tabellenblatt zu kennen, kann ich die Frage nicht klar beantworten.
Möglicherweise kann man das mit einer Schleife lösen, z.B. wenn die Bereiche immer gleich groß sind und auch den selben Abstand zueinander haben.
Schreibe die restlichen elf Bereichsadressen ("A7:K47") mal hier ins Forum, dann kann man sich darüber auch Gedanken machen.

Gruß WernerB.
Anzeige
AW: Vielen Dank! noch ne klein Frage:)
28.10.2003 13:10:22
Jürgen
Hi Werner,
ich hab vorerst den Code 12 mal kopiert und die Bereiche entsprechend geändert. Die Sortierung funktioniert für alle 12 Bereiche, allerdings flackert bei der Ausführung der Bildschirm heftig.

Hier die 12 Bereiche:

A7:K47 ; A53:K93 ; A99:K139 ; A145:K185 ; A191:K231 ; A237:K277 ; A283:K323 ; A329:K369 ; A375:K415 ; A421:K461 ; A467:K507 ; A513:K553

Die Bereiche sind immer gleich groß.
Viele Grüße Jürgen
Anzeige
AW: Vielen Dank! noch ne klein Frage:)
28.10.2003 13:24:27
WernerB.
Hallo Jürgen,

das Flackern sollte nicht sein, wenn nur am Anfang
Application.ScreenUpdating = False

steht und am Ende
Application.ScreenUpdating = True

Dazwischen sollten diese Anweisungen nicht stehen.

Deine Bereichsadressen muss ich erst mal auf mich wirken lassen.

Gruß WernerB.
Anzeige
Jetzt ises perfekt! Tsd Dank!
28.10.2003 13:39:27
Jürgen
Hi Werner,
das war die Lösung!
Hab dummerweise die Anweisung: Application.ScreenUpdating = True
zwölf mal mitkopiert. Elf mal gelöscht und jetzt flackert nichts mehr!!
Hast mir wirklich sehr geholfen! Nochmals Tausend Dank.
Ist auch nicht tragisch wenn dir zu dem langen Code auf die schnelle nichts einfällt. Es funktioniert auch so prächtig!
Viele sonnige Grüße
Jürgen
Anzeige
AW: Jetzt ises perfekt! Tsd Dank!
28.10.2003 13:49:52
WernerB.
Hallo Jürgen,

hier die von mir bereits angedeutete Schleifenlösung:

Private Sub Workbook_Open()
Dim i As Integer, j As Integer, laR As Integer, a As Integer, k As Integer
Application.ScreenUpdating = False
With Worksheets("kurz")
a = 7
k = 47
For j = 1 To 12
.Range("A" & a & ":K" & k).Sort Key1:=.Range("A" & a), _
Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
laR = k
For i = k To a Step -1
If .Cells(i, 1).Text <> "" Then
laR = i
Exit For
End If
Next i
.Range("A" & a & ":K" & laR).Sort Key1:=.Range("A" & a), _
Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
a = a + 46
k = k + 46
Next j
End With
Application.ScreenUpdating = True
End Sub

Gruß WernerB.
Anzeige
AW: Jetzt ises perfekt! Tsd Dank!
28.10.2003 16:12:58
Jürgen
Hi Werner,
hab den neuen Code eingesetzt und kann berichten: läuft absolut problemlos
und ist natürlich wesentlich kürzer als die vorige Version.

Ich kanns nur wiederholen: Tausend Dank für Deine Hilfe
und viele Grüße
Jürgen
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Aufsteigend sortieren und leere Zellen ans Ende verschieben


Schritt-für-Schritt-Anleitung

Um Daten in Excel aufsteigend zu sortieren und dabei leere Zellen ans Ende der Liste zu verschieben, kannst Du folgendes VBA-Makro verwenden. Achte darauf, dass dieses Beispiel für Excel 2013 und höher funktioniert.

  1. Öffne Deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden Code in das Modul ein:

    Private Sub Workbook_Open()
       Dim i As Integer, laR As Integer
       Application.ScreenUpdating = False
       With Worksheets("kurz")
           .Range("A7:K47").Sort Key1:=.Range("A7"), _
           Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, _
           MatchCase:=False, Orientation:=xlTopToBottom
           laR = 47
           For i = 47 To 1 Step -1
               If .Cells(i, 1).Text <> "" Then
                   laR = i
                   Exit For
               End If
           Next i
           .Range("A7:K" & laR).Sort Key1:=.Range("A7"), _
           Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
           MatchCase:=False, Orientation:=xlTopToBottom
       End With
       Application.ScreenUpdating = True
    End Sub
  4. Schließe den VBA-Editor und speichere die Arbeitsmappe als xlsm (Makro-fähige Datei).

  5. Schließe die Datei und öffne sie erneut, um die Sortierung automatisch auszuführen.


Häufige Fehler und Lösungen

  • Leerzeilen stehen am Anfang: Dies passiert häufig, wenn die Zellen Formeln enthalten, die den Wert 0 zurückgeben. Stelle sicher, dass die Zellen tatsächlich leer sind oder passe die Bedingung im Code an.

  • Flackernder Bildschirm: Achte darauf, die Zeilen Application.ScreenUpdating = False und Application.ScreenUpdating = True nur einmal zu verwenden, um das Flackern beim Sortieren zu vermeiden.


Alternative Methoden

Wenn Du die leeren Zellen ignorieren oder aus der Sicht der Sortierung ausschließen möchtest, kannst Du die Funktion FILTER oder SORT in neueren Excel-Versionen (Excel 365 oder Excel 2021) verwenden. Ein Beispiel:

=SORT(FILTER(A7:K47, A7:A47 <> ""), 1, TRUE)

Diese Formel sortiert die Werte aufsteigend und ignoriert leere Zellen.


Praktische Beispiele

Angenommen, Du hast folgende Daten in den Zellen A7 bis A10:

5
3
(empty)
2
(empty)
1

Nach der Anwendung des Makros oder der Formel würde die sortierte Liste so aussehen:

1
2
3
5
(empty)
(empty)

So kannst Du sicherstellen, dass die leeren Zellen ans Ende verschoben werden.


Tipps für Profis

  • Überlege, ob Du die Excel-Formel SORT oder FILTER verwenden möchtest, um leere Zellen zu ignorieren, anstatt VBA zu nutzen.
  • Wenn Du mehrere Bereiche gleichzeitig sortieren möchtest, kannst Du eine Schleife im VBA-Code verwenden, um den Prozess zu automatisieren und den Code zu kürzen.

FAQ: Häufige Fragen

1. Wie kann ich leere Zellen in der Sortierung ignorieren? Du kannst die FILTER-Funktion verwenden, um leere Zellen auszuschließen, bevor Du die Daten sortierst.

2. Was mache ich, wenn das Sortieren nicht funktioniert? Überprüfe, ob die Zellen tatsächlich leer sind oder ob sie Formeln enthalten, die Werte zurückgeben. Möglicherweise musst Du den VBA-Code anpassen.

3. Kann ich die Sortierung auch ohne VBA durchführen? Ja, Du kannst die Funktion SORT oder FILTER in den neuesten Excel-Versionen verwenden, um Daten dynamisch zu sortieren und leere Zellen zu ignorieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige