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

Forumthread: Zeile mit VBA in ein anderes Blatt kopieren

Zeile mit VBA in ein anderes Blatt kopieren
30.07.2015 09:55:08
Anna
Hallo liebe Community,
ich stehe vor einem kleinen Problem:
Ich habe im Tabellenblatt "Ausgangsdaten" von E3:CW50 Werte.
Nun möchte ich jede Zeile in das Tabellenblatt"Eingangsdaten" kopieren.
Im Tabellenblatt"Eingangsdaten" soll jedoch nur jede 2. Zeile befüllt werden.
Bisher habe ich folgenden Code, der aber leider jede Zeile im Tabellenblatt " _ Eingangsdaten" befüllt und zudem noch sehr langsam ist. Kann man das mit Arrays (da hab ich leider sehr wenig Ahnung von) schneller machen?

Sub Kosten_berechnen()
Dim KostenZeile As Integer
Dim KostenSpalte As Integer
Worksheets("Fitness").Activate
Range("C4:M101").Select
Selection.Clear
Range("A3:A101").Select
Selection.Clear
For KostenZeile = 3 To 101
For KostenSpalte = 3 To 101
Worksheets("Eingangsdaten").Cells(KostenZeile, KostenSpalte + 1).Value = Worksheets(" _
_
Ausgangsdaten").Cells(KostenZeile, KostenSpalte + 2)
End If
Next KostenSpalte
Next KostenZeile
End Sub

Vielen Dank für eure Hilfe!
Anna

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile mit VBA in ein anderes Blatt kopieren
30.07.2015 11:33:06
Michael
Hallo Anna,
der Code wird so nicht laufen; spätestens beim End If muß eine Fehlermeldung kommen á la End ohne If.
Ansonsten aktivierst Du das Blatt Fitness, machst aber alle weiteren Aktionen in zwei anderen Blättern.
Daß das langsam ist, liegt daran, daß Du alle Zellen einzeln beackerst. Die innere Schleife kannst Du einsparen, indem Du komplette Bereiche (Spalten 3 bis 101) oder Zeilen kopierst. Wenn es Formatierungen gibt, die Du im Zielblatt erhalten (oder Formeln in Werte umwandeln) möchtest, nimm copy ... pastespecial mit values, wenn nicht, einfach copy.
Beide Varianten im Code:
Sub Kosten_berechnen()
Dim KostenZeile As Long
Dim KostenSpalte As Long
Dim zeilensprung As Long
Worksheets("Fitness").Activate
Range("C4:M101").Clear
Range("A3:A101").Clear
Application.ScreenUpdating = False
Worksheets("Ausgangsdaten").Activate
zeilensprung = 0
For KostenZeile = 3 To 50 ' bis CW50!
'  kopiert ....
'  Range("E" & KostenZeile & ":CW" & KostenZeile).Copy _
'    Worksheets("Eingangsdaten").Range("E" & KostenZeile + zeilensprung)
'  fügt Werte ein:
Range("E" & KostenZeile & ":CW" & KostenZeile).Copy
Worksheets("Eingangsdaten").Range("E" & KostenZeile + zeilensprung). _
PasteSpecial Paste:=xlValues
zeilensprung = zeilensprung + 1
Next KostenZeile
Application.ScreenUpdating = True
Worksheets("Eingangsdaten").Activate
Range("E3").Select
End Sub
Schöne Grüße,
Michael

Anzeige
AW: Zeile mit VBA in ein anderes Blatt kopieren
30.07.2015 15:54:57
anna
Danke Michael.
Das klappt :D

freut mich, danke für die Rückmeldung owT
31.07.2015 13:33:45
Michael
;
Anzeige
Anzeige

Infobox / Tutorial

Zeile mit VBA in ein anderes Blatt kopieren


Schritt-für-Schritt-Anleitung

Um mit VBA eine Zeile zu kopieren und in ein anderes Blatt einzufügen, befolge diese Schritte:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub Kosten_berechnen()
    Dim KostenZeile As Long
    Dim zeilensprung As Long
    Worksheets("Fitness").Activate
    Range("C4:M101").Clear
    Range("A3:A101").Clear
    Application.ScreenUpdating = False
    Worksheets("Ausgangsdaten").Activate
    zeilensprung = 0
    For KostenZeile = 3 To 50 ' bis CW50!
        Range("E" & KostenZeile & ":CW" & KostenZeile).Copy
        Worksheets("Eingangsdaten").Range("E" & KostenZeile + zeilensprung).PasteSpecial Paste:=xlValues
        zeilensprung = zeilensprung + 1
    Next KostenZeile
    Application.ScreenUpdating = True
    Worksheets("Eingangsdaten").Activate
    Range("E3").Select
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Drücke ALT + F8, wähle Kosten_berechnen aus der Liste und klicke auf Ausführen.

Dieser Code kopiert die Werte aus dem Blatt "Ausgangsdaten" und fügt sie in das Blatt "Eingangsdaten" ein, wobei nur jede zweite Zeile befüllt wird.


Häufige Fehler und Lösungen

  • Fehler: "End ohne If"

    • Überprüfe, ob alle If-Anweisungen korrekt geschlossen sind. In deinem ursprünglichen Code fehlte das End If.
  • Langsame Ausführung

    • Der Code kann langsamer sein, wenn Zellen einzeln bearbeitet werden. Verwende Range.Copy und PasteSpecial, um die gesamte Zeile auf einmal zu kopieren.

Alternative Methoden

Eine alternative Methode ist die Verwendung von Arrays. Hier ein Beispiel:

Sub Kosten_berechnen_mit_Array()
    Dim Daten() As Variant
    Dim i As Long
    Dim zeilensprung As Long
    Daten = Worksheets("Ausgangsdaten").Range("E3:CW50").Value
    zeilensprung = 0
    For i = LBound(Daten, 1) To UBound(Daten, 1)
        Worksheets("Eingangsdaten").Range("E" & (i + zeilensprung)).Value = Daten(i, 1)
        zeilensprung = zeilensprung + 1
    Next i
End Sub

Hierbei werden die Daten in ein Array geladen, was die Verarbeitungsgeschwindigkeit erheblich verbessern kann.


Praktische Beispiele

Wenn du beispielsweise in einem großen Datenblatt nur bestimmte Daten kopieren möchtest, kannst du den Bereich in der Range-Anweisung anpassen. Zum Beispiel:

Range("A" & KostenZeile & ":C" & KostenZeile).Copy

Dadurch kannst du nur die Spalten A bis C für die Kopie auswählen.


Tipps für Profis

  • Aktiviere Application.ScreenUpdating = False, um die Bildschirmaktualisierung während der Ausführung zu deaktivieren. Das beschleunigt den Prozess.
  • Nutze Application.Calculation = xlCalculationManual, um die Berechnungen während der Laufzeit zu stoppen und sie nach dem Kopiervorgang wieder zu aktivieren.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehrere Blätter zu verwenden? Du kannst den Code so anpassen, dass er in einer Schleife durch mehrere Blätter iteriert und die gleiche Kopieraktion durchführt.

2. Warum wird der Code langsam ausgeführt? Die langsame Ausführung kann durch das Kopieren und Einfügen von Zelle zu Zelle verursacht werden. Verwende stattdessen das Kopieren ganzer Bereiche oder Arrays, um die Geschwindigkeit zu erhöhen.

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