Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1500to1504
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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 :)

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

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

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 :-)

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

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 :)

Anzeige
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

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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige