Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Auswahl in neue Tab in nächste freie Zeile kopie

Auswahl in neue Tab in nächste freie Zeile kopie
17.02.2015 21:04:13
Wolfgang

Hallo liebe EXCEL-Freunde, ich bin neu hier und bitte um eine Hilfestellung. Ich beschäftige mich seit einigen Wochen mit einem Problem. Ich bekomme es einfach nicht hin. Ich war zwar schon ganz nahe an einer Lösung, aber irgendwie scheitert es.
Also:
Ich habe ein Tabellenblatt mit 5 Spalten. Das Tabellenblatt hat den Namen: "Vorwoche". Alle Zellen der jeweiligen Zeile sind mit Daten befüllt. In der letzten Spalte einer Zeile steht entweder der Wert: "beendet" oder die Zelle ist leer. In der Arbeitsmappe gibt es ein zweites Tabellenblatt mit dem Namen: "Beendete". In das Tabellenblatt "Vorwoche" kopiere ich jede Woche neue Daten. Ich möchte nun die Zeilen die in Spalte 5 den Wert "beendet" haben sichern, indem ich diese Zeilen in das Blatt "Beendete" kopiere und dann immer an die letzte Zeile anfüge. Im Laufe des Jahres wird das Blatt "Beendete" also immer länger.
Ich habe es zwar geschafft einen bestimmten Bereich einer Tabelle zu kopieren und diesen Bereich dann fortlaufend an das Ende eines anderen Arbeitsblattes einzufügen. Ich schaffe es aber nicht, dass nur eine Auswahl (Selektion) kopiert wird.
Im Netz habe ich diesen Code gefunden:

Sub Zeile_kopieren()
'Bereich kopieren
Sheets("übergabe").Range("A1:I1").Copy
'einfügen in erste freie Zeile in ausgabe
Sheets("ausgabe").Cells(Rows.Count, 1).End(xlUp).Offset(1,0).PasteSpecial xlPasteValues
'Kopiermodus beenden
Application.CutCopyMode = False
End Sub
Der Code ist nahe an meiner Lösung. Es wird hier aber ein fixer Bereich (A1:i1) kopiert und nicht die Auswahl z.B. alle Zeilen die in Spalte 5 den Wert "beendet" haben.
Ich würde mich sehr freuen, wenn mir jemand hilft. Danke!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Schleife + Prüfung fehlt
18.02.2015 07:06:48
MCO
Moin!
Dir fehlt eine Schleife, mit der du die beendeten identifizierst.

Sub Zeile_kopieren()
with sheets("Übergabe")
for i = 1 to .cells(rows.count,1).end(xlup).row
if .cells(i,"I")="beendet" then
'Bereich kopieren
.Range("A" & i & ":I" & i).Copy
'einfügen in erste freie Zeile in ausgabe
Sheets("ausgabe").Cells(Rows.Count, 1).End(xlUp).Offset(1,0).PasteSpecial xlPasteValues
end if
next i
'Kopiermodus beenden
Application.CutCopyMode = False
End Sub
Gruß, MCO

Schneller ohne Schleife
18.02.2015 09:18:52
Klaus M.vdT.
Hallo,
der Code von MCO wird funktionieren, aber bei sehr langen Listen entsprechend Zeit brauchen. Bei solchen Aufgaben missbrauche ich gerne den Autofilter, um dafür auf eine Schleife zu verzichten. Der folgende Code:
Sub Zeile_kopieren()
Application.ScreenUpdating = False
Dim lRow As Long
With Sheets("Übergabe")
lRow = .Cells(Rows.Count, 1).End(xlUp).Row
If lRow > 1 Then
If .AutoFilterMode Then .Cells.AutoFilter
.Range(.Cells(1, 9), .Cells(lRow, 9)).AutoFilter
.Range("I1").AutoFilter Field:=1, Criteria1:="beendet"
.Range("A2:I" & .Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible). _
Copy
Sheets("ausgabe").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial  _
xlPasteValues
Application.CutCopyMode = False
End If
.Cells.AutoFilter
End With
Application.ScreenUpdating = True
End Sub
Wird bei 10 oder 20 zu bearbeitenden Zeilen nur tausendstel Sekunden schneller sein als die Schleife von MCO, aber dafür auch bei 10.000 oder 100.000 Zeilen nicht merklich langsamer werden :-)
Grüße,
Klaus M.vdT.

Anzeige
AW: Schneller ohne Schleife
18.02.2015 09:57:40
Daniel
Hi
der Autofilter beschleunigt das ganze nur bedingt.
wenn du wirklich Speed brauchst, ist das das schnellste:
- sortiere die Tabelle nach der Filterspalte (im Sortieren ist Excel sehr schnell)
- suche mit der .FIND-funktion den ersten und letzten Eintrag (Searchdirection:=xlNext/xlPrevious)
- kopiere die dazwischenliegenden Zellen
entscheidend ist für Excel nicht die Anzahl der zu kopierenden Zellen, sondern die Anzahl der lückenlos zuammenhängenden Bereiche (ein Bereich ist alles, was mit "ZelleObenLinks-ZelleUntenRechts" beschrieben werden kann)
Sind die Daten nun so strukturiert, dass die zu kopierenenden Zellen immer einzeln sind, dann ist auch der Autofilter nicht viel schneller als die Schleife.
Dh der Autofilter bringt nur was, wenn viele zu kopierenden Zeilen direkt untereinander stehen.
Durch das Sortieren bringst du alle zu kopierenden Zellen zusammen, so dass ein einziger Bereich entsteht.
Dann kannst du zwar auch filtern, aber es ist nicht mehr zwingend notwendig.
Gruß Daniel

Anzeige
cool, danke!
18.02.2015 10:11:53
Klaus M.vdT.
Hi Daniel,
coole Idee! Ich werde mir mal eine Liste mit 100.000 Dummy-Datensätzen bauen und dann deinen Vorschlag austesten.
LG,
Klaus M.vdT.

326 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige