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

Forumthread: VBA für automatisches sortieren

VBA für automatisches sortieren
06.09.2016 10:15:14
Kalo
Moin moin,
habe mal wieder eine Frage. Ich möchte in meiner Datei (ist eine Auftragsübersicht) eine automatische Sortierung der Datensätze einbauen. Mit der normalen Sortierung muss man ja denke ich immer den entsprechenden Bereich manuell markieren und dann jedes mal die Sortierung neu ausführen. Hätte es gerne so, dass wenn ein neuer Auftrag mit einem neuen Termin eingegeben wird, nach Eingabe des Termin die Zeilen entsprechend sortiert werden. Da dies wahrscheinlich nur mit einem Makro geht habe ich es gegoogelt und dieses hier gefunden (ist schon für meine Zellbereiche angepasst):
Private Sub Workshett_Change(ByVal Target As Range)
If Not Appplication.Intersect(Target, Range("F12:F10000")) Is Nothing Then
Range("A12:H10000").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
Range("A1").Select
End If
End Sub

Leider funktioniert es bei mir nicht. Es erfolgt überhaupt keine Sortierung. Habe ich evtl. was vergessen oder nicht beachtet?
Noch zur Info: Die Excel enthält bereits ein Makro, dass mir automatisch Mails schickt, sobald sich ein Termin eines Auftrags 3 oder weniger Tage in der Zukunft befindet oder bereits überschritten wurde und der Auftrag noch nicht als erledigt gekennzeichnet wurde. Natürlich sind auch in den Zeilen Formeln hinterlegt, die mir beispielsweise die Resttage anzeigen bzw. ermitteln.
Dieses Makro habe ich in einem neuen Modul eingebaut. Also habe ich nun zwei Module für die beiden Makros.
Für die Aufträge werden übliche Daten wie Nummer, Kunde usw. eingetragen und als letztes in Zeile F der Termin. Danach sollte sich alle Zeilen des Auftrags entsprechend einsortieren. Zeile G zeigt die Resttage, die anhand des Termins ermittelt werden und Zeile H ist nur für das Kennzeichnen des Auftrags als erledigt vorgesehen. Die Sortierung sollte aufsteigend erfolgen, also das die aktuelleren Termine bzw. die zeitnahen unten in der Liste stehen (weiß nicht wie ich es besser sagen soll :))
Die Zeilen können sich ruhig sortieren, sobald im Feld Termin ein Termin eingetragen wurde, also es muss nicht erst beim nächsten Start sein oder so was.
Vielleicht kann mir hier ja jemand damit helfen :)
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA für automatisches sortieren
06.09.2016 10:43:57
baschti007
Halli Hallo Kalo
Wasm steht denn in Range("A1") ?
Lag mal eine Bsp. Datei hoch
Gruß BAsti
AW: VBA für automatisches sortieren
06.09.2016 13:27:37
snb
Zuviele Tippfehler:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F12:F10000")) Is Nothing Then Range("A12:H10000").Sort Range(" _
A1")
End Sub

Anzeige
AW: VBA für automatisches sortieren
06.09.2016 16:31:58
Kalo
Hallo zusammen,
bin grade etwas verwirrt^^. Glaube es ist das Beste wenn ich hier nun mal die Beispieldatei hochlade.
Geht wie gesagt um die Spalte F nach der dann die Termine aufsteigend sortiert werden sollen, also das die aktuellen quasi unten in der Liste stehen. Der Bereich, den das umfasst ist von A12 bis H10000. Daher weiß ich auch nicht, ob da nun A1 oder A12 im Makro stehen muss. In A1 steht ja nichts, was in die Sortierung fällt. Bis zur Zeile 11 ist es ja auch fixiert, weil oben dann allgemeine Informationen stehen, die immer sichtbar sein sollen.
Hier ist der Link:
https://www.herber.de/bbs/user/108054.xlsm
Hoffe es kann mir jemand helfen :)
Vielen Dank und beste Grüße an euch!
Anzeige
AW: VBA für automatisches sortieren
06.09.2016 11:17:44
baschti007
Oder versuch es mal so
Gruß Basti

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ende
If Target.Address = Range("A1").Address Then ' wenn Eintag in A1 geändert wird dann Wird das  _
Makro ausgefürht
With Range("A12:H10000")
.Sort Key1:=Range("A1"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom ' Key1 ist so zusagen die Spalte also A die Sortiert wird von  _
Klein nach Groß
End With
End If
ende:
End Sub

Anzeige
wo? in welchem Modul?
06.09.2016 15:47:43
Michael
Hi,
das Worksheet_Change MUSS nicht in "irgendeinem" Modul stehen, sondern in dem TABELLEN-Modul zu dem Tabellenblatt, in dem es ausgeführt werden soll.
Schöne Grüße,
Michael
AW: wo? in welchem Modul?
07.09.2016 13:48:13
Kalo
Hi,
war jetzt nicht sicher ob meine Antwort hier evtl. untergegangen ist. Daher lade ich hier nochmal die Dummy Datei hoch mit den beiden Makros. Geht ja nur um die automatische Sortierung und irgendwo scheint da ein Fehler zu sein, da es ja nicht funktioniert.
Hier ist der Link:

Die Datei https://www.herber.de/bbs/user/108071.xlsm wurde aus Datenschutzgründen gelöscht


Danke für jede Hilfe ;)
Anzeige
AW: wo? in welchem Modul?
08.09.2016 14:26:28
Michael
Hi,
ich habe die Tippfehler beseitigt, die Sortierung ab Zeile 11 (die Überschrift wird dann automatisch erkannt) geändert und das Ganze ins richtige Modul, nämlich ins BLATT gesteckt und Modul2 gelöscht.
Datei anbei: https://www.herber.de/bbs/user/108080.xlsm
Schöne Grüße,
Michael
Anzeige
AW: wo? in welchem Modul?
09.09.2016 09:50:42
Kalo
Hi Michael,
vielen Dank für die Überarbeitung. Habe es eben getestet. Aber kann es sein das die Sortierung nur funktioniert, wenn zuerst ein Eingangsdatum eingetragen wird? Also das dadurch das Makro dann aktiviert wird? Wenn ich dies weg lasse erfolgt keine Sortierung. Sonst funktioniert es. Das wollte ich nur nochmal wissen, weil ich dann ja dran denken muss, das immer zwingend ein Eingangsdatum eingetragen wird.
Vielen Dank erstmal :)
Anzeige
AW: wo? in welchem Modul?
09.09.2016 10:11:18
Michael
Hi,
das wolltest Du ja anscheinend so, denn dafür sorgt die Codezeile mit dem Intersect (daß das Ding eben nur anspringt, wenn in Spalte F was eingegeben wird).
Ich habe Dir das Sortieren mal (zusätzlich!) auf einen Button gelegt: https://www.herber.de/bbs/user/108090.xlsm
Schöne Grüße,
Michael
Anzeige
AW: wo? in welchem Modul?
09.09.2016 18:58:34
Kalo
Hi,
ich glaube da ist vielleicht was missverstanden worden. Die Daten sollen anhand der Spalte F sortiert werden, also nach "Termin", sofern dort ein Termin eingetragen wird. So wie ich das jetzt sehe wird die Liste glaube ich anhand des Eingangsdatums sortiert. Mit der Sortierung wollte ich jedoch erreichen, dass die Auftragszeilen terminlich sortiert in der Liste stehen.
Das ist denke ich in dem Fall sinnvoll, da dann die Aufträge mit nahendem Datum ja automatisch auf rot gesetzt werden und dann durch die Sortierung alle mehr oder weniger zusammenhängend in der Liste stehen und nicht überall verteilt, sodass man nach roten Feldern suchen muss. Hintergrund ist der, dass Aufträge ganz unterschiedliche Termine haben können und dadurch in der Liste dann zusammenstehen sollen.
Also im Endeffekt soll die Liste anhand der Daten, die in Spalte F bei "Termin" eingetragen werden sortiert werden (sobald dort ein Datum eingetragen wird). Die komplette Auftragszeile soll sich dann an die entsprechende Stelle setzen. Das Eingangsdatum ist für die Sortierung dann nicht relevant.
Könnte hierfür vielleicht nochmal die Datei und das Makro entsprechend angepasst werden?
https://www.herber.de/bbs/user/108080.xlsm
Denn ich bin mittlerweile überhaupt nicht mehr sicher, wo in dem VBA was gesetzt werden muss ;)
Den Sortierbutton benötige ich nicht, daher hier die Datei ohne den Button.
Vielen Dank vorab und allen ein schönes Wochenende!!
Anzeige
AW: wo? in welchem Modul?
10.09.2016 15:53:44
Michael
Hi,
die zu sortierende Spalte gibst Du durch key an, wobei der oberste Werte der Spalte reicht.
Also: statt Key1:=Range("A11") schreibst Du Key1:=Range("F11")
Schöne Grüße,
Michael
AW: wo? in welchem Modul?
12.09.2016 11:23:32
Kalo
Hi Michael,
vielen Dank für die Info. Nach der Änderung funktioniert die Sortierung nun korrekt sortiert nach Spalte F. Eine Kleinigkeit hätte ich nun noch. Nach dem das Makro die Sortierung ausführt springt die aktive Zelle auf Zelle A11. Das ist denke ich durch den Befehl am Ende des Makros:
Range ("A12") .Select
so geregelt. Ich habe diesen versuchsweise einmal rausgelöscht und dann markiert er mir den kompletten Auswahlbereich und setzt die aktive Zelle dann aber trotzdem auf A12. Gibt es einen Befehl den ich dort anstatt A12 einfügen kann und der dann bewirkt das die aktive Zelle nach Ausführen des Makros bzw. der Sortierung dann eben weiterhin die entsprechende Zelle in Spalte F mit dem eingetragenen Termin ist? Also ich trage quasi den Termin in der entsprechenden Zelle in Spalte F ein, bestätige z.B. durch Enter was das Makro für die Sortierung auslöst (so wie es auch momentan funktioniert) und die aktive Zelle ist weiterhin die entsprechende Zelle in Spalte F an der neuen Stelle?
Dies ist ja nur ein kleiner "Schönheitsfehler" aber wäre schön wenn es hierfür einen Befehl gibt, da sonst nach der Sortierung ja immer an den Anfang der Liste zurückgesprungen wird und man erst wieder an die Stelle zurückscrollen müsste bzw. sie suchen müsste, wo man gerade dran gearbeitet hat.
Das Makro sieht nach Löschen des Schlussbefehls nun so aus:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F12:F10000")) Is Nothing Then
Range("A11:H10000").Select
Selection.Sort Key1:=Range("F11"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End If
End Sub

Vielen Dank jedenfalls schon mal für alles :D
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Automatische Sortierung in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um eine automatische Sortierung in Excel zu implementieren, kannst du ein VBA-Makro verwenden. Folge diesen Schritten:

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

  2. Finde das Tabellenskript für das Arbeitsblatt, in dem du die Sortierung anwenden möchtest. Du musst das Skript in das entsprechende Tabellenmodul einfügen.

  3. Füge folgenden Code ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("F12:F10000")) Is Nothing Then
           Range("A11:H10000").Sort Key1:=Range("F11"), Order1:=xlAscending, _
           Header:=xlYes, MatchCase:=False, Orientation:=xlTopToBottom
       End If
    End Sub
  4. Schließe den VBA-Editor und kehre zu deinem Excel-Dokument zurück.

  5. Teste die Funktion, indem du einen neuen Termin in die Spalte F eingibst. Die Zeilen sollten sich automatisch sortieren.


Häufige Fehler und Lösungen

  • Problem: Es erfolgt keine Sortierung.

    • Lösung: Stelle sicher, dass der Code im richtigen Modul eingefügt ist (Tabellenmodul des Arbeitsblatts).
  • Problem: Der Code hat Tippfehler.

    • Lösung: Überprüfe den Code auf Tippfehler, insbesondere den Namen des Ereignisses (Worksheet_Change) und die Range.
  • Problem: Nach der Sortierung springt die aktive Zelle auf A11.

    • Lösung: Du kannst den Befehl zum Auswählen einer spezifischen Zelle nach der Sortierung anpassen.

Alternative Methoden

Wenn du keine VBA-Lösungen verwenden möchtest, kannst du auch:

  • Excel-Tabellen verwenden: Tabellen haben eingebaute Sortierfunktionen, die du manuell oder über die Registerkarte "Daten" verwenden kannst.
  • Datenfilter nutzen: Mit den Datenfiltern kannst du die Sichtbarkeit von Zeilen basierend auf bestimmten Kriterien anpassen.

Praktische Beispiele

  1. Automatische Sortierung von Befestigungsteilen: Wenn du eine Liste von Befestigungsteilen hast, kannst du die Spalte für das Fälligkeitsdatum erstellen und die obigen Schritte befolgen, um sicherzustellen, dass die Teile nach ihrem Fälligkeitsdatum sortiert werden.

  2. Automatische Sortierung von Drehteilen: Ähnlich wie bei Befestigungsteilen kannst du die Drehteile in einer Excel-Tabelle organisieren und automatisch nach Lieferdatum sortieren.


Tipps für Profis

  • Nutze den Befehl Application.EnableEvents = False am Anfang deines Makros, um zu verhindern, dass das Makro bei jeder Eingabe in die Zellen erneut ausgeführt wird.
  • Experimentiere mit OrderCustom, um spezifische Sortierreihenfolgen zu definieren.
  • Berücksichtige, dass die automatische Sortierung von Zeilen die Datenintegrität beeinflussen kann; stelle sicher, dass alle relevanten Daten in den zu sortierenden Zeilen enthalten sind.

FAQ: Häufige Fragen

1. Funktioniert die automatische Sortierung auch bei allen Excel-Versionen? Ja, die VBA-Skripte sind in den meisten Excel-Versionen kompatibel, aber einige Funktionen können je nach Version variieren.

2. Was passiert, wenn ich einen Termin in einer anderen Spalte eintrage? Das Makro reagiert nur auf Änderungen in der definierten Range (F12:F10000). Änderungen in anderen Spalten lösen keine Sortierung aus.

3. Kann ich die Sortierung auch nach mehreren Kriterien durchführen? Ja, du kannst mehrere Key-Parameter in deinem Sortierbefehl hinzufügen, um nach mehreren Spalten zu sortieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige