Hallo Chris,ist sonst nicht meine Art, andere, die sich hier Mühe geben, zu kritisieren. Aber da sich Stephan als Anfänger geoutet hat und evtl. Dein Makro an seine Verhältnisse anpassen will und da er vielleicht noch etwas dazu lernen kann, hier ein paar Anmerkungen zu Deinem Code.
Wozu die Variablendeklarration, wenn die Variable Wert im Code gar nicht benutzt wird?
Dim wert
Die nächste Codezeile ermittelt die letzte Zeile der Tabelle dann nicht, wenn in Spalte A leere Zellen vorkommen, wovon man vermutlich ausgehen kann. Besser wäre
i = Range("A65536").End(xlUp).Row
i = Range("A1").End(xlDown).Row
Die nächste Zeile liefert ebenfalls nur dann den gewünschten Wert für die letzte besetzte Spalte, wenn in allen Spalten in Zeile 1 ein Eintrag vorhanden ist. Außerdem ist sie m.E. überflüssig (siehe unten).
i2 = Range("A1").End(xlToRight).Column
For x = 1 To i
Die nächste Zeile ist innerhalb der Schleife falsch "angebracht", sie gehört an den Anfang des Codes. Wird der Code so wie er ist aus einem anderen Tabellenblatt als Blatt1 gestartet, werden die Variablen i und i2 falsch belegt.
Sheets("Blatt1").Select
If ActiveSheet.Cells(x, 1).Formula = "x" Then
Zur nächsten For-Schleife: Die ist sehr ineffizient, da sie immer durchlaufen werden muß, um die nächste leere Zelle zu finden. Je mehr Daten übernommen wurden, um so länger dauert das. Besser wäre es , einen Zähler mitzuführen.
For z = 1 To 65000
If Sheets("Ergebnis").Cells(z, 1).Formula = "" Then Exit For
Next z
In der nächsten Schleife werden die Daten zellenweise übernommen. Schneller geht es bei gleichem Ergebnis, wenn man die Zeilen komplett übernimmt.
For y = 1 To i2
Sheets("Ergebnis").Cells(z, y).Formula = Sheets("Blatt1").Cells(x, y).Formula
Next y
End If
Next x
Hast Du das Makro mal mit 10000 Zeilen hinsichtlich der Performance getestet? Ich habe bei 10000 Zeilen und 3 Spalten nach 6 Minuten abgebrochen.
Nix für ungut.
Gruß
Martin Beck