Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA - kopieren und in nähste freie Zelle einfügen

VBA - kopieren und in nähste freie Zelle einfügen
07.07.2016 13:15:02
Futzi
Hallöle alle zusammen :)
ich komme nicht weiter....
ich brauche ein Makro, dass von Tabellenblatt 2 die Daten aus
B2 bis Ende kopiert und in Tabellenblatt 1 in die nächste freie ZELLE in Spalte A einfügt.
Ist das möglich?
Danke schon mal für eure Hilfe :)

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - kopieren und in nähste freie Zelle ein
07.07.2016 13:19:06
Michael
Hallo!
Sub a()
Dim Wb As Workbook
Dim WsQ As Worksheet
Dim WsZ As Worksheet
Set Wb = ThisWorkbook
With Wb
Set WsQ = .Worksheets(2)
Set WsZ = .Worksheets(1)
End With
With WsQ
.Range("B2:B" & .Cells(.Rows.Count, 2).End(xlUp).Row).Copy _
Destination:=WsZ.Range("A" & WsZ.Cells(WsZ.Rows.Count, 1).End(xlUp).Row + 1)
End With
End Sub
LG
Michael

Anzeige
AW: VBA - kopieren und in nähste freie Zelle ein
07.07.2016 13:30:35
Futzi
Es klappt!!!! Vielen Dank :) ich hab es stundenlang versucht und nicht hinbekommen....

AW: VBA - kopieren und in nähste freie Zelle ein
07.07.2016 13:40:44
Futzi
Eine Frage hab ich noch: ich möchte die gleiche Formel für die Spalten daneben anwenden, jetzt kopiert der die zwar in die richtige spalte aber in die Zelle wo Spalte A aufhört. Was muss ich ändern?

Anzeige
AW: VBA - kopieren und in nähste freie Zelle ein
07.07.2016 13:52:31
Michael
Hallo!
Vielleicht reichen Dir schon die Kommentare zum vorigen Code, zum selbst Basteln:
Sub a()
Dim Wb As Workbook
Dim WsQ As Worksheet
Dim WsZ As Worksheet
Set Wb = ThisWorkbook
With Wb
'Das Quell-Blatt bestimmen...
Set WsQ = .Worksheets(2) '...in dem Fall das 2. Blatt der Mappe (von links)
'Alternativ, ein Blatt mit bestimmtem Namen als Quell-Blatt bestimmen
'Set WsQ = .Worksheets("ABC") 'Blatt mit dem Namen "ABC"
'Das Ziel-Blatt bestimmen...
Set WsZ = .Worksheets(1) '...in dem Fall das 1. Blatt der Mappe (von links)
'Alternativ, ein Blatt mit bestimmtem Namen als Quell-Blatt bestimmen
'Set WsZ = .Worksheets("Lorem") 'Blatt mit dem Namen "Lorem"
End With
'Im Quell-Blatt...
With WsQ
'...einen Bereich kopieren...
'.cells(.rows.count, 2).end(xlup).row sucht die letzte gefüllte Zelle in Spalt B,
'das ist Spalte 2 (von links)
.Range("B2:B" & .Cells(.Rows.Count, 2).End(xlUp).Row).Copy _
Destination:=WsZ.Range("A" & WsZ.Cells(WsZ.Rows.Count, 1).End(xlUp).Row + 1)
'>>> genauso sucht WsZ.Cells(WsZ.Rows.Count, 1).end(xlup).Row die letzte gefüllte Zelle
'in Spalte A, das ist Spalte 1 --> soll also hier das Spalten-Ende von zB Spalte G  _
heran-
'gezogen werden, müsste es WsZ.Cells(WsZ.Rows.Count, 7).End(xlup).Row lauten
'+1 ist erforderlich weil die Daten ja nicht in die letzte befüllte Zelle sondern in  _
die
'nächste Zelle, die bereits LEER ist, geschrieben werden sollen...
'Zum Teste...
Application.ReferenceStyle = xlR1C1 'Zeigt statt Spalten-Buchstaben Ziffern an
Application.ReferenceStyle = xlA1 'Zeigt statt Spalten-Ziffern Buchstaben an
End With
End Sub
LG
Michael

Anzeige
AW: VBA - kopieren und in nähste freie Zelle ein
07.07.2016 14:23:01
Futzi
Danke schon mal für die Erklärung :)
Ich habe jetzt alles angepasst, aber der zeigt mir immer noch einen Fehler an, immer mit diesen Befehlen:
Dim Wb As Workbook
Dim WsQ As Worksheet
Dim WsZ As Worksheet
Ich hab die auch schon weg gemacht oder nur teilweise stehen gelassen, irgendwie funktioniert es nicht.
Wahrscheinlich ist es voll einfach und ich denke zu kompliziert :D

Anzeige
Ui, ui, ui, ui, ui....
07.07.2016 14:44:42
Michael
Futzi,
...so geht das nicht! Ich habe nicht gemeint spiele am gesamten Code herum, wenn Du nicht weißt, was Du tust ;-).
Ich habe gehofft Dir aufzuzeigen, wie die Spalte bestimmt wird, deren letzte Zelle Du als Ende des Bereichs heranziehen willst - so wie von Dir angefragt.
Dim Wb etc. ist schon erforderlich, sonst hätt ich's ja nicht geschrieben - das einfach wegzulöschen, funktioniert natürlich nicht.
Also lieber so: Sag mir einfach, was Du in Ergänzung zum ersten Code noch brauchst, dann schreibe ich Dir das fix fertig so wie gebraucht - und Du musst nix Basteln. Beschreibe, so wie bei der ersten Frage, was wohin kopiert werden soll.
LG
Michael

Anzeige
AW: Ui, ui, ui, ui, ui....
08.07.2016 08:22:51
Futzi
ich habe ein Sheet auf dem in Spalte B, F, H, AB, AJ, CA Daten stehen. Diese sollen nacheinander in Spalte A,B,C.... von Tabellenblatt 1 eingefügt werden. Das Makro soll prüfen wo die nächste freie Zelle der jeweiligen Spalte ist und dort dann die Werte eintragen.
Danke fürs Schreiben :-)

Anzeige
Makro...
08.07.2016 09:39:51
Michael
Hallo!
Sub a()
Dim Wb As Workbook
Dim WsQ As Worksheet
Dim WsZ As Worksheet
Set Wb = ThisWorkbook
'ggf. anpassen...
With Wb
Set WsQ = .Worksheets(2) '...VON Tabellenblatt 2
Set WsZ = .Worksheets(1) '...NACH Tabellenblatt 1
End With
With WsQ
'B2:Bx in die nächste freie Zelle A kopieren
.Range("B2:B" & .Cells(.Rows.Count, 2).End(xlUp).Row).Copy _
Destination:=WsZ.Range("A" & WsZ.Cells(WsZ.Rows.Count, 1).End(xlUp).Row + 1)
'F2:Fx in die nächste freie Zelle B kopieren
.Range("F2:F" & .Cells(.Rows.Count, 6).End(xlUp).Row).Copy _
Destination:=WsZ.Range("B" & WsZ.Cells(WsZ.Rows.Count, 2).End(xlUp).Row + 1)
'H2:Hx in die nächste freie Zelle C kopieren
.Range("H2:H" & .Cells(.Rows.Count, 8).End(xlUp).Row).Copy _
Destination:=WsZ.Range("C" & WsZ.Cells(WsZ.Rows.Count, 3).End(xlUp).Row + 1)
'AB2:ABx in die nächste freie Zelle D kopieren
.Range("AB2:AB" & .Cells(.Rows.Count, 28).End(xlUp).Row).Copy _
Destination:=WsZ.Range("D" & WsZ.Cells(WsZ.Rows.Count, 4).End(xlUp).Row + 1)
'AJ2:AJx in die nächste freie Zelle E kopieren
.Range("AJ2:AJ" & .Cells(.Rows.Count, 36).End(xlUp).Row).Copy _
Destination:=WsZ.Range("E" & WsZ.Cells(WsZ.Rows.Count, 5).End(xlUp).Row + 1)
'CA2:CAx in die nächste freie Zelle F kopieren
.Range("CA2:CA" & .Cells(.Rows.Count, 79).End(xlUp).Row).Copy _
Destination:=WsZ.Range("F" & WsZ.Cells(WsZ.Rows.Count, 6).End(xlUp).Row + 1)
End With
End Sub
Wenn Du die Quell- und Ziel-Tabellenblätter lieber mit Namen ansprechen möchtest, also nicht mit ihrer Position in der Mappe (aktuell vom Blatt 2 ins Blatt 1 kopieren), müsstest Du diesen Teil
    'ggf. anpassen...
With Wb
Set WsQ = .Worksheets(2) '...VON Tabellenblatt 2
Set WsZ = .Worksheets(1) '...NACH Tabellenblatt 1
End With
mit diesem ersetzen
    With Wb
Set WsQ = .Worksheets("DeinQuellblattName")
Set WsZ = .Worksheets("DeinZielblattName")
End With
LG
Michael

Anzeige
AW: Makro...
08.07.2016 10:04:19
Justin
Es tut mir Leid, dass ich deine Zeit so in Anspruch nehme.... aber es funktioniert nicht :/ Die Daten werden zwar nach wie vor in Spalte A kopiert, aber die anderen Spalten bleiben leer. In Spalte A kommen dann noch 3 Vertragsnummern.... warum auch immer :D Ich für das Makro noch mal hinzu, ich musste die Spalten noch mal ändern, vll liegt es daran?
Sub copy()
Dim Wb As Workbook
Dim WsQ As Worksheet
Dim WsZ As Worksheet
Set Wb = ThisWorkbook
'ggf. anpassen...
With Wb
Set WsQ = .Worksheets("Abrechnung einfügen")
Set WsZ = .Worksheets("Abrechnung")
End With
With WsQ
'B2:Bx in die nächste freie Zelle A kopieren
.Range("B2:B" & .Cells(.Rows.Count, 2).End(xlUp).Row).copy _
Destination:=WsZ.Range("A" & WsZ.Cells(WsZ.Rows.Count, 1).End(xlUp).Row + 1)
'F2:Fx in die nächste freie Zelle B kopieren
.Range("M2:M" & .Cells(.Rows.Count, 13).End(xlUp).Row).copy _
Destination:=WsZ.Range("I" & WsZ.Cells(WsZ.Rows.Count, 9).End(xlUp).Row + 1)
'H2:Hx in die nächste freie Zelle C kopieren
.Range("AB2:AB" & .Cells(.Rows.Count, 28).End(xlUp).Row).copy _
Destination:=WsZ.Range("D" & WsZ.Cells(WsZ.Rows.Count, 4).End(xlUp).Row + 1)
'AB2:ABx in die nächste freie Zelle D kopieren
.Range("AY2:AY" & .Cells(.Rows.Count, 51).End(xlUp).Row).copy _
Destination:=WsZ.Range("E" & WsZ.Cells(WsZ.Rows.Count, 5).End(xlUp).Row + 1)
'AJ2:AJx in die nächste freie Zelle E kopieren
.Range("bl2:bl" & .Cells(.Rows.Count, 64).End(xlUp).Row).copy _
Destination:=WsZ.Range("F" & WsZ.Cells(WsZ.Rows.Count, 6).End(xlUp).Row + 1)
'AJ2:AJx in die nächste freie Zelle E kopieren
.Range("bn2:bn" & .Cells(.Rows.Count, 66).End(xlUp).Row).copy _
Destination:=WsZ.Range("G" & WsZ.Cells(WsZ.Rows.Count, 7).End(xlUp).Row + 1)
'CA2:CAx in die nächste freie Zelle F kopieren
.Range("CA2:CA" & .Cells(.Rows.Count, 79).End(xlUp).Row).copy _
Destination:=WsZ.Range("H" & WsZ.Cells(WsZ.Rows.Count, 8).End(xlUp).Row + 1)
End With
End Sub

Anzeige
Funktioniert bei mir einwandfrei...
08.07.2016 10:40:50
Michael
...kann daher auch nicht nachvollziehen, was bei Dir schief läuft!
Evtl. lade mir die Mappe hoch, dann kann ich nochmal schauen...
LG
Michael

Kleine Datei zum Testen
08.07.2016 10:43:26
Michael
...funktioniert genauso, wie gewünscht!
Teste hier: https://www.herber.de/bbs/user/106854.xlsm
LG
Michael

Anzeige
AW: Kleine Datei zum Testen
08.07.2016 10:49:41
Futzi
Ich lade meine mal hoch: Das ist nur ein Auszug aus der großen Excel Datei
https://www.herber.de/bbs/user/106855.xlsm
Vll. findest du ja den Fehler :)
Danke schon mal :)

Das liegt nicht am Makro, sondern an Deiner Tab
08.07.2016 11:37:54
Michael
Futzi,
;-)... Schau Dir mal die identifizierten Ziel-Adressen (nächste leere Zelle von unten) an:
$A$4
$I$1156
$D$1156
$E$1187
$F$1218
$G$1218
$H$1249

Du hast überall im Ziel-Blatt außer in A Daten in Zeilen ab 1000 stehen - und das Makro hat auch, wie gewünscht, alle Daten richtig kopiert, nur eben erst viel weiter unten. D.h. räum Dein Zielblatt auf ;-).
LG
Michael

Anzeige
AW: Das liegt nicht am Makro, sondern an Deiner Tab
08.07.2016 11:55:47
Futzi
Oh nein wie dämlich......
Es klappt super! Sorry für den Aufwand!
Vielen vielen Dank!!!! :)))

Kommt vor ;-)! Schönes WE! LG owt
08.07.2016 12:14:10
Michael
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA: Kopieren und in die nächste freie Zelle einfügen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke im Menü auf Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub a()
       Dim Wb As Workbook
       Dim WsQ As Worksheet
       Dim WsZ As Worksheet
       Set Wb = ThisWorkbook
    
       With Wb
           Set WsQ = .Worksheets(2) ' Quellblatt
           Set WsZ = .Worksheets(1) ' Zielblatt
       End With
    
       With WsQ
           .Range("B2:B" & .Cells(.Rows.Count, 2).End(xlUp).Row).Copy _
           Destination:=WsZ.Range("A" & WsZ.Cells(WsZ.Rows.Count, 1).End(xlUp).Row + 1)
           ' Weitere Spalten können hier hinzugefügt werden
       End With
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus: Drücke ALT + F8, wähle a aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: "Variable nicht definiert"
    Lösung: Stelle sicher, dass du die Variablen Wb, WsQ, und WsZ deklariert hast. Diese sind notwendig für das Makro.

  • Fehler: Daten werden nicht in die nächste freie Zelle eingefügt.
    Lösung: Überprüfe die Zellen in deinem Zielblatt. Wenn dort bereits Daten vorhanden sind, wird das Makro die nächste leere Zelle ab der letzten gefüllten Zelle anvisieren.

  • Fehler: "Es tut mir leid, es funktioniert nicht."
    Lösung: Stelle sicher, dass die Blattnamen korrekt sind oder dass die Blätter in der richtigen Reihenfolge in der Arbeitsmappe vorhanden sind.


Alternative Methoden

Anstelle eines VBA-Makros kannst du auch Formeln oder die Excel-Funktion „Daten konsolidieren“ verwenden. Diese Methode ist jedoch weniger flexibel als VBA, besonders wenn du eine große Anzahl von Zellen kopieren und in die nächste freie Zelle einfügen möchtest.


Praktische Beispiele

Hier ist ein erweitertes Beispiel, das zeigt, wie du mehrere Spalten gleichzeitig kopieren und in die nächste freie Zelle der Zielspalte einfügen kannst:

Sub copyMultipleColumns()
    Dim Wb As Workbook
    Dim WsQ As Worksheet
    Dim WsZ As Worksheet
    Set Wb = ThisWorkbook
    With Wb
        Set WsQ = .Worksheets(2) ' Quellblatt
        Set WsZ = .Worksheets(1) ' Zielblatt
    End With

    With WsQ
        .Range("B2:B" & .Cells(.Rows.Count, 2).End(xlUp).Row).Copy _
        Destination:=WsZ.Range("A" & WsZ.Cells(WsZ.Rows.Count, 1).End(xlUp).Row + 1)
        .Range("F2:F" & .Cells(.Rows.Count, 6).End(xlUp).Row).Copy _
        Destination:=WsZ.Range("B" & WsZ.Cells(WsZ.Rows.Count, 2).End(xlUp).Row + 1)
        ' Weitere Spalten können hier hinzugefügt werden
    End With
End Sub

Tipps für Profis

  • Verwende die Application.ScreenUpdating = False und Application.ScreenUpdating = True Befehle, um die Performance deines Makros zu verbessern und das Flackern des Bildschirms während der Ausführung zu vermeiden.

  • Kommentiere deinen Code gut, damit du und andere ihn später besser verstehen können.

  • Teste deine Makros immer in einer Sicherungskopie deiner Excel-Datei, um ungewollte Datenverluste zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um weitere Spalten zu kopieren?
Du kannst einfach weitere .Range- und .Copy-Befehle im Makro hinzufügen, wie im praktischen Beispiel gezeigt.

2. Funktioniert das Makro auch in Excel 365?
Ja, das Makro funktioniert in allen modernen Versionen von Excel, einschließlich Excel 365.

3. Was mache ich, wenn ich eine Fehlermeldung erhalte?
Überprüfe deinen Code auf Tippfehler und stelle sicher, dass die verwendeten Arbeitsblätter existieren und korrekt benannt sind.

4. Kann ich das Makro anpassen, um Daten in andere Spalten einzufügen?
Ja, ändere einfach die Zielzellen im Destination-Parameter des .Copy-Befehls, um die Daten in andere Spalten einzufügen.

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