Wie bekomme ich durch Makros eine Zelle in eine andere Tabelle verschoben?
Ich habe eine ToDo-Liste erstellt. Sobald ich etwas als "erledigt" fertigstelle, möchte ich das die ganze Spalte (z.B. A5-E5) in eine andere Tabelle verschoben wird die "erledigte Aufträge" heißt. Ich möchte auch das die leere Spalte aus der ersten Tabelle verschwindet und bei der Tabelle "erledigte Aufträge" immer der nächste erledigte Auftrag drunter verschoben wird (ich kann es nicht besser erklären :D ich hoffe ihr versteht was ich meine). Ich habe schon viel im Netz gesucht aber nichts hat geklappt. Es wäre auch okay ein Kontrollkästchen einzubauen und damit zu sagen das die Spalte verschoben wird. Falls das nicht noch schwieriger ist :DD Oder gibt es noch eine andere möglichkeit die Zellen zu verschieben, also ohne Makros? z.B. mit der WENN-Funktion?
Danke schonmal für die Antworten :))
1 Antwort
Aus meiner Sicht nur mit Makro, in etwa so:
Sub test2()
i = 1
While Tabelle1.Cells(i, 5).Value <> ""
If Tabelle1.Cells(i, 5).Value = "erledigt" Then
zeilemax = Tabelle2.Range("A:A").End(xlUp).Row + 1
Worksheets("Tabelle1").Rows(i).Copy Destination:=Worksheets("Tabelle2").Rows(zeilemax)
Worksheets("Tabelle1").Rows(i).Delete
End If
i = i + 1
Wend
End Sub
(Zeilenumbrüche musst Du noch glattziehen!).
In diesem Beispiel wird Spalte E in Tabelle 1 auf den Status erledigt geprüft. Kannst Du nach Belieben ändern.
Es bleibt noch die Frage nach dem Auslöser: Manuell, beim Speichern oder bei jeder Änderung prüfen.
Nimm stattdessen mal Visual Basic. Da geht ein neues Fenster auf - links steht eine Art Baumstruktur mit VBAProject...
Für dann mal bei Tabelle1 (oder wo auch immer die Daten stehen, die kopiert werden sollen), diesen Code ein
Private Sub worksheet_change(ByVal Target As Range)
i = 1
While Tabelle1.Cells(i, 5).Value <> ""
If Tabelle1.Cells(i, 5).Value = "erledigt" Then
zeilemax = Tabelle2.Cells(Rows.Count, 1).End(xlUp).Row + 1
Worksheets("Tabelle1").Rows(i).Copy Destination:=Worksheets("Tabelle2").Rows(zeilemax)
Worksheets("Tabelle1").Rows(i).Delete
End If
i = i + 1
Wend
End Sub
Das ist die Variante, die bei jeder Änderung in Tabelle 1 den Code automatisch durchläuft, d.h. sobald du den Status auf erledigt setzt, wird die Zeile kopiert und gelöscht. Wichtig: Die private Sub muss auf der Tabelle stehen, auf der die Änderungen überwacht werden sollen.
Beim Speichern musst Du aber statt dem üblichen XLSX mit XLSM speichern, sonst ist der Code wieder weg.
Ich habe es versucht aber es klappt nicht :( entweder mache ich etwas Falsch oder ich mache etwas Falsch :D
Meine Schritte: Ich gehe oben auf Makros, dann erstelle ich eine neue Makros und habe dann deinen Text einfach mal eingefügt.. Namen und so habe ich umgeändert..
Dann speicher ich das ab und beim nächsten öffnen aktiviere ich dann die Makros.. Ich gebe erledigt ein, drücke Enter und es passiert nichts.. :D
Jetzt habe ich mir gedacht das ich das einfach Farbig mache.
Also: offen -> Rot, in Bearbeitung -> Gelb, erledigt -> Grün
Ich stelle dann alles auf "Bedingte Formatierungen" ein aber sobald ich dann z.B. erledigt hinschreibe wird es nicht Grün..
Ich hasse Excel :D