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

Forumthread: Kopieren dauert zu lange

Kopieren dauert zu lange
09.04.2018 08:54:52
Frank
Hallo,
ich habe zwei Tabellenblätter. Im zweiten Tabellenblatt "Einlesen" sind die aktuellen Daten.(Wagennummer, KM, Datum) Nun sollen diese in das erste Tabellenblatt "Anlagen" kopiert werden.
Bedingung: Die Wagennummer(Spalte B/Spalte A) muss gleich sein.
Problem: Die Wagennummer existiert mehrfach.
Mit meinem Script funktioniert es zwar, aber durch die Schleifen dauert das ewig da die Tabelle "Einlesen" bis zu 120 und die Tabelle "Anlagen" bis zu 800 Einträge hat.
Gibt es da eine schnellere Lösung?
Mein Script:

Sub einlesen_km()
Dim Z As Integer
Dim Zz As Integer
Dim i As Integer
Dim ii As Integer
Z = Sheets("Einlesen").UsedRange.Rows.Count
Zz = Sheets("Anlagen").UsedRange.Rows.Count
For i = 6 To Z
'Sheets("Einlesen").Cells(1, 1) = i
For ii = 7 To Zz
'Sheets("Einlesen").Cells(1, 2) = ii
If Sheets("Anlagen").Cells(ii, 2) = Sheets("Einlesen").Cells(i, 1) Then
Sheets("Anlagen").Cells(ii, 11) = Sheets("Einlesen").Cells(i, 2)
Sheets("Anlagen").Cells(ii, 12) = Sheets("Einlesen").Cells(i, 3)
End If
Next ii
Next i
End Sub

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren dauert zu lange
09.04.2018 09:06:00
Dieter(Drummer)
Hallo Frank,
du könntest schonmal im Code, in der nächsten Zeile nach letzter "DIM Zeile" folgendes einfügen:
Application.Screenupdating = False

Das müsste schon etwas helfen.
Gruß, Dieter(Drummer)
AW: Kopieren dauert zu lange
09.04.2018 10:46:17
Frank
Hallo Dieter,
da die andere Lösung funktioniert und sehr schnell ist, habe ich dieses jetzt nicht mehr ausprobiert.
Trotzdem Vielen Dank!
Anzeige
AW: Kopieren dauert zu lange
09.04.2018 09:23:28
Daniel
Hi
in welcher Tabelle existiert die Wagennummer mehrfach, in "Anlagen" oder in "Einlesen"?
Wenn nur in "Anlagen" die Wagennummern mehrfach vorkommen können, würde ich die SVerweisfunktion verwenden.
Auch das geht per VBA:
Z = Sheets("Einlesen").UsedRange.Rows.Count
Zz = Sheets("Anlagen").UsedRange.Rows.Count
With Sheets("Anlagen").Range("K7:L" & Zz)
.columns(1).FormulaR1C1 = "=IfError(VLookUp(RC2,Einlesen!R6C1:R" & Z & "C3,2,0),"""")"
.columns(2).FormulaR1C1 = "=IfError(VLookUp(RC2,Einlesen!R6C1:R" & Z & "C3,3,0),"""")"
.Formula = .Value
End With
Gruß Daniel
Anzeige
AW: Kopieren dauert zu lange
09.04.2018 10:44:39
Frank
Hallo Daniel,
Deine Lösung funktioniert, aber ich verstehe sie noch nicht so ganz :/
Werde mir den die Funktionen FormulaR1C1 und VLookUp mal genauer anschauen...
Vielen Dank!
AW: Kopieren dauert zu lange
09.04.2018 10:58:30
Daniel
Hi
der Code macht nichts anderes, als die Formel:
=WennFehler(SVerweis(B7;Einlesen!$A$6:$C$?;2;0);"") 

in die Zelle K7 und die Folgezellen einzutragen und dann die Formelergbenisse zu kopieren und durch ihren Wert zu ersetzen.
Die Formel wird in VBA in der Englischen Schreibweise mit R1C1-Addressierungsart angegeben (entspricht dem Z1S1 im deutschen)
Gruß Daniel
Anzeige
AW: Kopieren dauert zu lange
09.04.2018 10:56:31
Frank
Wie sähe das den aus wenn jetzt eine weitere Bedingung dazu kommen würde.
z.B. wenn in "Anlagen" Spalte C ein "x" stehen müste?
AW: Kopieren dauert zu lange
09.04.2018 11:02:58
Daniel
Hi
einfach die Formel mit der entsprechenden WENN-Abfrage erweitern:
=Wenn(C7="x";WennFehler(SVerweis(B7;Einlesen!$A$6:$C$120;2;0);"";"")
bzw dann für den VBA-Code
.columns(1).FormulaR1C1 = "=IF(RC3=""x"",IfError(VLookUp(RC2,Einlesen!R6C1:R" & Z & "C3,2,0),""""),"""")"
für die zweite Spalte dann entsprechend.
Gruß Daniel
Anzeige
AW: Kopieren dauert zu lange
09.04.2018 13:02:10
Frank
Danke!!!!!
AW: Kopieren dauert zu lange
11.04.2018 12:27:35
Frank
Hallo,
Mit dieser Formel habe ich nun das Problem, dass die Zellen wenn kein x vorhanden ist gelehrt werden.
Gruß
Frank
AW: Kopieren dauert zu lange
11.04.2018 13:02:20
Daniel
Hi
eine Möglichkeit wäre, vor einfügen der Formel den Autofilter in dieser Spalte auf "x" zu setzten.
die Formel wird dann nur in die sichtbaren Zellen eingetragen und die Zeilen ohne "x" bleiben erhalten.
die andere Möglichkeit wäre, dass du die Formel etwas abänderst bei "ungleich x" anstelle des SVerweises den Wert aus der Zelle ausgeben lässt:
bisher Formel in Spalte Y: =Wenn(X1="x";SVerweis(...);"")
jetzt Formel in Spalte Z: =Wenn(X1="x",SVerweis(...);Y1)

dann die Formel in Spalte Z kopieren und in Y als Wert einfügen
Gruß Daniel
PS: die Formeln sind hier nur Prinzip-Formeln, die Zellbezüge musst du entsprechend anpassen.
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Schnellere Lösungen zum Kopieren von Daten in Excel


Schritt-für-Schritt-Anleitung

  1. Tabellenblätter vorbereiten: Stelle sicher, dass Du zwei Tabellenblätter hast: "Einlesen" (mit aktuellen Daten) und "Anlagen" (wo die Daten kopiert werden sollen).

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Neues Modul erstellen: Klicke im Menü auf "Einfügen" und wähle "Modul".

  4. Code einfügen: Füge den folgenden Code in das Modul ein, um die Daten von "Einlesen" nach "Anlagen" zu kopieren:

    Sub einlesen_km()
       Dim Z As Integer
       Dim Zz As Integer
       Dim i As Integer
       Dim ii As Integer
       Z = Sheets("Einlesen").UsedRange.Rows.Count
       Zz = Sheets("Anlagen").UsedRange.Rows.Count
       Application.ScreenUpdating = False
       For i = 6 To Z
           For ii = 7 To Zz
               If Sheets("Anlagen").Cells(ii, 2) = Sheets("Einlesen").Cells(i, 1) Then
                   Sheets("Anlagen").Cells(ii, 11) = Sheets("Einlesen").Cells(i, 2)
                   Sheets("Anlagen").Cells(ii, 12) = Sheets("Einlesen").Cells(i, 3)
               End If
           Next ii
       Next i
       Application.ScreenUpdating = True
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.


Häufige Fehler und Lösungen

  • Problem: Das Kopieren dauert zu lange.

    • Lösung: Füge Application.ScreenUpdating = False vor dem Start der Schleifen hinzu, um die Bildschirmaktualisierung zu deaktivieren.
  • Problem: Die Daten werden nicht korrekt kopiert.

    • Lösung: Überprüfe die Zellreferenzen im Code. Stelle sicher, dass die Spaltenbezüge korrekt sind.

Alternative Methoden

Eine alternative Methode zur Datenübertragung ist die Verwendung der SVerweis-Funktion. Wenn Du in "Anlagen" die Wagennummern mehrfach hast, kannst Du die Formel in VBA verwenden:

With Sheets("Anlagen").Range("K7:L" & Zz)
    .Columns(1).FormulaR1C1 = "=IfError(VLookUp(RC2,Einlesen!R6C1:R" & Z & "C3,2,0),"""")"
    .Columns(2).FormulaR1C1 = "=IfError(VLookUp(RC2,Einlesen!R6C1:R" & Z & "C3,3,0),"""")"
    .Formula = .Value
End With

Praktische Beispiele

Wenn Du eine zusätzliche Bedingung hinzufügen möchtest, beispielsweise dass in Spalte C ein "x" stehen muss, kannst Du die Formel wie folgt erweitern:

.Columns(1).FormulaR1C1 = "=IF(RC3=""x"",IfError(VLookUp(RC2,Einlesen!R6C1:R" & Z & "C3,2,0),""""),"""")"

Damit wird nur kopiert, wenn die Bedingung erfüllt ist.


Tipps für Profis

  • Verwende Autofilter: Setze den Autofilter in der relevanten Spalte auf "x", bevor Du die Formeln einfügst. So wird die Formel nur in die sichtbaren Zellen eingetragen.
  • Ersetze Formeln durch Werte: Wenn Du die Ergebnisse der Formeln in Werte umwandeln möchtest, kannst Du die Zellen kopieren und dann mit "Inhalte einfügen" -> "Werte" einfügen.

FAQ: Häufige Fragen

1. Wie kann ich die Laufzeit des Makros weiter reduzieren?
Verwende zusätzlich Application.Calculation = xlCalculationManual, um die automatische Neuberechnung zu deaktivieren, während das Makro läuft.

2. Was mache ich, wenn ich die Daten aus mehreren Tabellenblättern kopieren möchte?
Du kannst die Schleifen anpassen, um durch alle benötigten Tabellenblätter zu iterieren und die Daten entsprechend zu kopieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige