Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antwortento 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
Antwortento 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
Antwortento top
#4
(27.03.2020, 13:03)MisterBurns schrieb: ... Das dauert nur Sekundenbruchteile.

Nicht jeder optimiert sich ohne Zwang seine Kaffeepausen weg. Wink

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

zum Bleistift. Big Grin

Gruß Uwe
Antwortento 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
Antwortento 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
Antwortento 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
Antwortento top


Gehe zu:


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