Registriert seit: 27.03.2020
Version(en): Office 2013
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
27.03.2020, 13:27
(Dieser Beitrag wurde zuletzt bearbeitet: 27.03.2020, 13:27 von Kuwer.)
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
Registriert seit: 02.05.2018
Version(en): Excel 365 & 2016
27.03.2020, 14:03
(Dieser Beitrag wurde zuletzt bearbeitet: 27.03.2020, 14:03 von MisterBurns.)
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
(27.03.2020, 14:03)MisterBurns schrieb: ... Das dauert nur Sekundenbruchteile.
Nicht jeder optimiert sich ohne Zwang seine Kaffeepausen weg.
Gruß Uwe
Registriert seit: 02.05.2018
Version(en): Excel 365 & 2016
@Uwe: Du meinst also ein Beamtenmakro?
Schöne Grüße
Berni
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
(27.03.2020, 19:44)MisterBurns schrieb: @Uwe: Du meinst also ein Beamtenmakro?
zum Bleistift.
Gruß Uwe
Registriert seit: 27.03.2020
Version(en): Office 2013
Guten Morgen Uwe,
lieben Dank für die Bearbeitung, ihr habt natürlich recht, es dauert
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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
Registriert seit: 27.03.2020
Version(en): Office 2013
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