Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Zeile in anderes Tabellenblatt kopieren und löschen
#1
Guten Tag,
ich habe eine Exceldatei mit zwwei Tabellenblättern, bei der, wenn in Tabelle1 Spalte M das Datum gleich dem Tagesdatum -1 ist, die entsprechende Zeile in Tabelle2 kopiert und aus Tabelle1 gelöscht werden soll. In Tabelle1 sollen dann die restlichen Zeilen "nachrutschen", es sollen also keine Leerzeichen entstehen. In Tabelle2 sollen die kopierten Zeilen fortlaufend unetreinander stehen.

Geschafft habe ich nur, dass die Zeilen aus Tabelle1 in Tabelle2 verschoben werden, aber in Tabelle1 verbleiben. Weiter komme ich nicht, wobei ich mich auch eher als Laie bezeichnen würde.
Würde mich über eine Lösung sehr freuen.
Grüße, Uli

Hier mein Code:
Code:
Sub Uli()
Sheets("Tabelle2").Unprotect
For i = 1 To Cells(Rows.Count, 13).End(xlUp).Row
    If Cells(i, 13) < Date - 1 Then
    ls = Cells(i, 256).End(xlToLeft).Column
    lz = Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row + 1
    Range(Cells(i, 1), Cells(i, ls)).Copy Sheets("Tabelle2").Cells(lz, 1)
    End If
Next i
Sheets("Tabelle2").Protect
End Sub
Top
#2
Hallo Uli,
Sub Uli()
  Dim i As Long
  Sheets("Tabelle2").Unprotect
  For i = Cells(Rows.Count, 13).End(xlUp).Row To 1 Step -1
      If Cells(i, 13).Value = (Date - 1) Then
          Rows(i).Copy Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Offset(1)
          Rows(i).Delete
      End If
  Next i
  Sheets("Tabelle2").Protect
End Sub
Gruß Uwe
Top
#3
Wie immer der Hinweis bei diesem bereits tausendmal erörterten Thema: Die Schleifenlösung ist dafür nicht optimal. Bei 100 Zeilen wahrscheinlich kein Problem, bei 10.000 Zeilen wird die Umsetzung ein Geduldsspiel. Die wesentlich bessere Lösung ist die gesuchten Zellen mittels Autofilter einzugrenzen und in einem Rutsch zu kopieren/löschen. Das dauert nur Sekundenbruchteile.
Schöne Grüße
Berni
Top
#4
(27.03.2020, 14:03)MisterBurns schrieb: ... Das dauert nur Sekundenbruchteile.

Nicht jeder optimiert sich ohne Zwang seine Kaffeepausen weg. Wink

Gruß Uwe
Top
#5
@Uwe: Du meinst also ein Beamtenmakro?
Schöne Grüße
Berni
Top
#6
(27.03.2020, 19:44)MisterBurns schrieb: @Uwe: Du meinst also ein Beamtenmakro?

zum Bleistift. Big Grin

Gruß Uwe
Top
#7
Guten Morgen Uwe,
lieben Dank für die Bearbeitung, ihr habt natürlich recht, es dauert Angel
Wenn es eine einfachere und schnellere Bearbeitung per Autofilter gibt, würde mich diese auch sehr interessieren. Ich bin ja Ecxellaie und war der Meinung, dass meine Vorstellung nur mit VBA zu lösen ist. Da die Liste täglich wächst, wäre ich als Nichtbeamter an einer schnelleren Lösung interessiert :17: .
Danke noch mal für die Hilfe, Grüße,
Uli
Top
#8
Hallo Uli,

lade mal bitte eine Beispieldatei hoch. Ist die Datumsspalte sortiert?

Zitat:Da die Liste täglich wächst, ....

Aber doch nur, wenn keine Daten verschoben werden würden!?

So sollte es aber auch schon schneller laufen:
Sub Uli()
Dim i As Long
Application.ScreenUpdating = False
Sheets("Tabelle2").Unprotect
For i = Cells(Rows.Count, 13).End(xlUp).Row To 1 Step -1
If Cells(i, 13).Value < Date Then
Rows(i).Copy Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Offset(1)
Rows(i).Delete
End If
Next i
Sheets("Tabelle2").Protect
Application.ScreenUpdating = True
End Sub
Gruß Uwe
Top
#9
Hallo Uwe,
entschuldigung, das mit der wachsenden Liste war blöd ausgedrückt. Es werden täglich neue Daten eingegeben (so ca. 50 Zeilen), und es fallen statistisch ähnlich viele raus. Die Datumsspalte ist allerdings nicht sortiert, da individuelle Daten innerhalb eines 14 Tageszeitraumes eingegeben werden. War ja nur beim Ersteinsatz etwas langsam, weil knapp 700 Zeilen aussortiert wurden. Von daher funktioniert das mit dem Code super. Danke schön noch mal.
Grüße, Uli
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste