Hallo Robert,
bei deiner Frage wegen der freien Zeile habe ich gesehen, dass im Makro noch ein kleiner Fehler ist (die letzte Zeile eines bereits eingefügten Bereichs wird überschrieben). Anbei das verbesserte Makro mit leerer Zelle nach dem letzten eingefügten Bereich:
Sub kopieren()
Dim lngLetzteA As Long
Dim lngLetzteB As Long
Dim lngMaximum As Long
Dim lngSpalte As Long
'Maximale Anzahl der Zeilen in Tabelle ermitteln
lngMaximum = ActiveSheet.Rows.Count
'letzte beschriebene Zeile in Spalte A in "Tabellenblatt A" ermitteln
With ThisWorkbook.Worksheets("Tabellenblatt A")
lngLetzteA = .Cells(.Rows.Count, 2).End(xlUp).Row
End With
'Schleife zum Finden der Spalte, in der die Daten eingefügt werden sollen
Do
'Nun in "Tabelle B" die Spalten prüfen, ob genügend Platz vorhanden
'Spaltenzähler um 1 erhöhen
lngSpalte = lngSpalte + 1
'letzte beschriebene Zeile in Spalte in "Tabelle B" ermitteln
With ThisWorkbook.Worksheets("Tabellenblatt B")
lngLetzteB = .Cells(.Rows.Count, lngSpalte).End(xlUp).Row
End With
If lngLetzteB > 1 Then lngLetzteB = lngLetzteB + 2
Loop Until lngLetzteA < lngMaximum - lngLetzteB
'Daten in gefundene Spalte kopieren
With ThisWorkbook.Worksheets("Tabellenblatt A")
.Range(.Cells(1, 2), .Cells(lngLetzteA, 2)).Copy
End With
With ThisWorkbook.Worksheets("Tabellenblatt B")
.Cells(lngLetzteB, lngSpalte).PasteSpecial Paste:=xlPasteValues
End With
'Copy-Markierung aufheben
Application.CutCopyMode = False
End Sub
Wenn du mehrere Spalten einfügen willst, dann bedenke, dass immer nur eine Spalte geprüft wird, ob genügend Platz zum Einfügen zur Verfügung steht.
Wenn du dann mehrere Spalten kopierst werden ggf. vorhandene Daten in den folgenden Spalten überschrieben. Und die Größe des zu kopierenden Bereichs wird weiterhin über Spalte B bestimmt.
Willst du z.B. die Spalten B bis D kopieren, dann ändere das Makro wie folgt:
'Daten in gefundene Spalte kopieren
With ThisWorkbook.Worksheets("Tabellenblatt A")
'Spalten B = 2 bis D = 4 kopieren
.Range(.Cells(1, 2), .Cells(lngLetzteA, 4)).Copy
End With
Gruß
M.O.