Clever-Excel-Forum

Normale Version: Zeilen in anderes Tabellenblatt schieben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe Excel-Community,

ich habe eine Liste zur Erfassung von Aufträgen erstellt.
Nun möchte ich, dass erledigte Aufträge farblich gekennzeichnet werden und

a) entweder gebündelt nach oben rutschen und sich nach Fertigstellungsdatum von alt nach neu sortieren,

b) oder noch besser die gesamte Zeile, also der gesamte Auftrag, in ein anderes Tabellenblatt geschoben wird.


Den Status des Auftrages wird per Drop-Down-Funktion (Datenüberprüfung) gesetzt.


Ich wäre euch sehr dankbar, wenn ihr mir bei meinem Anliegen helfen könntet.


Beste Grüße

Jannik
Hallöchen,

dann bleiben wir mal bei a - dazu gibt's Sortieren - im Reiter "Daten", ungefähr in der Mitte, wenn Excel breit genug angezeigt wird Smile
Danke für die schnelle Antwort.
Diese Funktion kenne ich bereits.

Das Problem daran ist, dass täglich mehrere Aufträge platziert werden und auch mehrere Aufträge als "erledigt" gekennzeichnet werden.
Hier wäre es schön, wenn die Sortierung automatisch funktioniert, sobald der Status eines Auftrages geändert wird.

Wahrscheinlich ist hierfür ein Makro notwendig, oder?
So eine automatisch sortierende Tabelle hatte ich auch mal: Nach jeder Änderung sortiert sich der aktuell bearbeitete Datensatz irgendwohin und du musst ihn suchen, um weiter daran zu arbeiten. „Das nervt wie Drahtseile“, wie Herr Balhorn sagen würde.

Ich würde von Hand sortieren. Und wenn du tollkühn genug bist, zeichnest du die notwendigen Schritte mit dem Makrorekorder auf, dann kannst du den auf einen Button legen und jederzeit wieder verwenden. Formatiere vorher deinen Datenbereich als „Tabelle“. 
Codes, um Erledigtes irgendwohin zu kopieren/verschieben, gibt es millionenfach im Netz. Wer es schafft, die nicht zu finden und für sich anzupassen, sollte auf sie verzichten.
Hallöchen,

Zitat:Nach jeder Änderung sortiert sich der aktuell bearbeitete Datensatz irgendwohin und du musst ihn suchen, um weiter daran zu arbeiten. „Das nervt wie Drahtseile“, wie Herr Balhorn sagen würde.

jupp, ganz meiner Meinung. Man kann einem Programmiere ja ganz schön viele Fragen dazu stellen - bzw. er stellt sie sich schon selbst Smile

--> Alternativen
Ein Button hätte nur den Vorteil, dass Du eine Aktion auf dem Blatt beginnst wo Du sonst ins Menü gehen musst. Ersatzweise könntest Du auch per Einstellungen einen Button in den Schnellzugriff legen ... Die Sortiereinstellungen werden ja beibehalten - solange die keiner ändert. Natürlich gibt es auch Anwender, die mit Excel nichts am Hut haben und Schwierigkeiten haben, die benötigten Standardbuttons zu finden und richtig zu bedienen. Zuweilen macht man was für ältere Leute, die vielleicht noch nicht mal ein Smartphone haben ...

--> (voll) automatische Sortierung

1) Sortierreihenfolge festlegen und programmieren

2) wann soll sortiert werden?

- bei einem Eintrag in einer bestimmte Spalte
--> Nachteil: eventuell ist die Zeile nicht vollständig ausgefüllt, siehe oben. Nach einem Eintrag in A50 geht es in B7 weiter ...
- Sortierung nacheinander - bei Einträgen in mehreren bestimmten Spalten einer Zeile
--> Nach einem Eintrag in A50 geht es in B7 weiter, dann C25, dann ...
--> Löschen eines Eintrages führt unter beiden Bedingungen ebenfalls zum Sortieren, also wenn Du in A7 löschst könnte die Zeile dann ab A50 zu finden sein ...

- Sortieren erst bei teilweisem oder vollständigem Ausfüllen einer Zeile
--> es muss definiert werden, wann bzw. bei welchen Zelleinträgen die Bedingung "teilweise" erfüllt ist
--> wenn Du was erst später eintragen willst, wird so lange nicht automatisch sortiert
--> bei einer Änderung im definierten Bereich wird wieder sortiert, egal, ob das erforderlich bzw. gewünscht ist
--> beim Löschen eines Eintrags im definierten Bereich wird hier nicht sortiert, auch wenn es gewünscht wäre

- Sortieren bei Einfügen einer neuen oder kopierten Zeile bzw. einzelner Zellen
--> Die z.B. am Ende eingefügten Daten stehen danach ggf. irgendwo anders ...

Die Fragestellungen könnte man sicher noch erweitern, also einfach mal eine Standardfunktion automatisieren kann schon recht aufwändig werden Wink

Zuweilen tauchen solche Fragen beim Anwender erst dann auf, wenn er merkt, dass eine erste Lösung nicht seinen Vorstellungen entspricht und letztendlich muss doch alles berücksichtigt werden Sad
Hallo

in deinem Beispiel gibt es doch bereits ein gutes Makro, leider nur an der falschen Stelle plaziert!
Ein Target Makro gehört IMMER in das Sheet, wo es ausgeführt werden soll.  Nicht in Modul3.
Bei Select Case hast du UCase(Target) angegeben, dort gehört aber LCase = LowCase hin!

Leider ist mein Beispiel eine alte Excel 2003 Datei, aber das Makro läuft darin einwandfrei.
Auch mit Sortierung der erledigten Aufträge nach Datum. Das Makro kannst du in deine Datei kopieren.

mfg Gast 123

Nachtrag:  die Application.Cualcaltion = xlManuell habe ich deaktiviert.
Hallo Gast123,

vielen Dank für deine Hilfe, das ist super!
Jetzt ist mir noch eine nette Sache in den Sinn gekommen.

Gehen wir davon aus, dass auch das ältere, nicht so sehr PC-affine Publikum die Liste nutzt:
Wäre es möglich, dass die Verschiebung reversibel ist, sprich dass Zeilen bzw. Aufträge aus dem Tabellenblatt "fertige Aufträge" wieder in "neue Aufträge" geschoben werden können, wenn der Status von "erledigt" auf "in Bearbeitung" geändert wird?

Falls dies nicht so ohne Weiteres funktioniert, ist das aber auch nicht schlimm.

Ich danke euch vielmals für Eure Hilfen.

Beste Grüße
Jannik
Hallo

freut mich sehr das euch mein Code gefällt. dann habe ich gute Arbeit geleistet.
Zurückkopieren ist auch kein Thema, der gleiche Code, nur leicht verändert.

Er gehört in das Sheet "erledigte Aufträge". Wenn ihr das DropDown auf "in Bearbeitung" setzt wird er zurückkopiert.
Dabei wird nach dem Kopieren und Datum sortieren automatisch auf das Sheet "neue Aufträge" umgeschaltet.

mfg Gast 123

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim loLetzte As Long
'Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
If Target.Column = 1 Then
If Target.Value <> Empty Then
   Select Case Target.Value
   Case "in Bearbeitung"
   With Worksheets("neue Aufträge")
        loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
        Rows(Target.Row).Copy
        .Rows(loLetzte).PasteSpecial Paste:=xlAll
        Rows(Target.Row).Delete
        'wiederhergestellte Daten Sortieren                       'oder xlAscending
        .Range("A3:N" & loLetzte + 1).Sort Key1:=.Range("B3"), Order1:=xlDescending, _
        Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
   End With
   End Select
End If
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
'Application.Calculation = xlCalculationAutomatic
Worksheets("neue Aufträge").Select
End Sub