4k Aufrufe
Gefragt in Tabellenkalkulation von
Guten Morgen,

ich habe eine To-Do Liste mit 2 Tabellenblättern.

im ersten Tabellenblatt "ToDo" gibt es Spalten von A bis H. In den Zeilen stehen Dinge wie Eingangsdatum, Kunde, Maßnahme, etc. In Spalte H ist der jeweilige Status. Dieser ist entweder "offen"," in Bearbeitung", "keine Umsetzung" oder "erledigt" (Auswahl durch Dropdown-Feld).

Ich hätte gerne, dass ich die kompletten Zeilen auf Knopfdruck mit einem Makro in das zweite Tabellenblatt "ErledigteFälle" kopiert und aus dem ersten gelöscht werden. Ich habe dies mit VBA gemacht. Nur leider kenne ich mich damit absolut gar nicht aus und habe lediglich verschiedene Codes aus dem Internet zusammenkopiert und versucht diese auf meinen Fall anzupassen. Klappt auch, bis auf eine Kleinigkeit. Meine Codes sehen so aus: (da ich mich nicht auskenne habe ich für die Kopie und die Löschung jeweils einen eigenen genommen).

Für die Kopie:

Sub BedingteKopieZeilen()
Dim Zeile As Long
Dim ZeileMax As Long
Dim i As Long

With Tabelle1
ZeileMax = .UsedRange.Rows.Count
n = 2

For Zeile = 2 To ZeileMax

If .Cells(Zeile, 8).Value = "erledigt" Then

.Rows(Zeile).Copy Destination:=Tabelle4.Rows(n)
n = n + 1

End If
Next Zeile
End With
End Sub


Und für die Löschung:

Public Sub bedingte_Zeilenloeschung()
lz = Cells(Rows.Count, 8).End(xlUp).Rows.Row
For t = lz To 4 Step -1
If Cells(t, 8).Value = "erledigt" Then
Rows(t).Delete Shift:=xlUp
End If
Next t
End Sub



Nun mein Problem:

Bei der Kopie schreibt es die Zeile immer in die 2. Zeile des 2. Tabellenblatts. Das liegt wohl an der Zeile "n=2" im ersten Code. Ich hätte aber gerne, dass immer in die erste freie Zeile des 2. Tabellenblatts kopiert wird. Ich denke dass ist für euch Profis bestimmt gar kein Problem den Code anzupassen. Wäre einer so lieb und könnte das für mich tun? Ggfs. wäre es auch super wenn zusätzlich noch die Fälle mit dem Status "keine Umstetzung" mit-integriert werden.

Bin um jede Hilfe dankbar.

Wünsche euch allen ein schönes Wochenende.

Dennis

3 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

probier dich mal mit dem macrorecorder

1)Auto filter ein
2)suchkreterium erledigt > kopieren> löschen
3)autofiöter aus

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ein Beispiel

gruss nighty

Sub CopyDel()
Worksheets(1).Range("H1").AutoFilter Field:=1, Criteria1:="erledigt"
Worksheets(1).Rows("2:" & Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row).Copy Worksheets(2).Cells(Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
Worksheets(1).Rows("2:" & Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row).Delete Shift:=xlUp
End Sub
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo,
oder so:
Sub Kopie()
If Sheets("ToDo").[H:H].Find("erledigt") Is Nothing Then Exit Sub
If Sheets("ToDo").AutoFilterMode = False Then _
Sheets("ToDo").Range("A1:H1").AutoFilter Field:=8, Criteria1:="erledigt", VisibleDropDown:=False
Sheets("ToDo").Range("A2:H" & Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy _
Sheets("ErledigteFälle").Range("A" & Sheets("ErledigteFälle").Cells(Rows.Count, 1).End(xlUp).Row + 1)
Sheets("ToDo").Range("A2:H" & Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible).EntireRow.Delete Shift:=xlUp
Sheets("ToDo").AutoFilterMode = False
End Sub


Musterdatei

Gruß
fedjo
...