Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Zeilen kopieren, mehrfach einfügen

VBA: Zeilen kopieren, mehrfach einfügen
15.12.2015 11:21:00
Hermann
Hallo zusammen,
in meinem Tabellenblatt Tabelle1 befinden sich 45 Zeilen in denen verschiedene Werte und Formeln eingetragen sind.
Nun möchte ich diesen "Zeilenblock" kopieren und beginnend ab Zeile 46 mehrfach einfügen. Die Anzahl der einzufügenden "Zeilenblöcke" (wie oft mehrfach)soll über eine Imputbox eingegeben werden. Ich bekomme diesen scheinbar einfachen Code leider nicht hin. Den VBA-Code per Makrorekorder möchte ich nicht verwenden. Vielleicht kann mir von Euch jemand behilflich sein. Danke.
Sub ZeilenEinfügen()
Dim rngRowsCopy As Range            'Variable für Zeilenbereich der kopiert
werden soll
Dim rngRowsInsertCopy As Range      'Variable für Zeilenbereich in dem die
kopierten Zeilen eingefügt werden sollen
Dim byteBlockanzahl As Byte         'Variabel, für die Anzahl wie oft der
kopierte Block eingefügt werden soll.
Const conCopyRow As Long = 1        ' KopierStartZeile
Const conCopyRowCount As Long = 45  ' Anzahl Zeilen
Const conInsertRow As Long = 46      ' EinfügeZeile
byteBlockanzahl = InputBox("Bitte Anzahl eingeben.")
Set rngRowsCopy = Rows(conCopyRow).Resize(conCopyRowCount)
Set rngRowsInsertCopy = Rows(conInsertRow). _
Resize(rngRowsCopy.Rows.Count * byteBlockanzahl)
'With rngRowsInsertCopy
'    .Insert
rngRowsCopy.Copy Destination:=rngRowsInsertCopy. _
Columns(1).Offset(rngRowsInsertCopy.Rows.Count)
'End With
Set rngRowsCopy = Nothing
Set rngRowsInsertCopy = Nothing
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Schleife...
15.12.2015 13:33:31
MCO

Sub ZeilenEinfügen()
Dim rngRowsCopy As Range            'Variable für Zeilenbereich der kopiert werden soll
Dim rngRowsInsertCopy As Range      'Variable für Zeilenbereich in dem die kopierten Zeilen  _
eingefügt werden sollen
Dim byteBlockanzahl As Byte         'Variabel, für die Anzahl wie oft der kopierte Block  _
eingefügt werden soll.
Const conCopyRow As Long = 1        ' KopierStartZeile
Const conCopyRowCount As Long = 45  ' Anzahl Zeilen
Const conInsertRow As Long = 46      ' EinfügeZeile
byteBlockanzahl = InputBox("Bitte Anzahl eingeben.")
Set rngRowsCopy = Rows(conCopyRow).Resize(conCopyRowCount)
Set rngRowsInsertCopy = Rows(conInsertRow). _
Resize(rngRowsCopy.Rows.Count * byteBlockanzahl)
'    'With rngRowsInsertCopy
'    '    .Insert
'        rngRowsCopy.Select
'        rngRowsCopy.Copy Destination:=rngRowsInsertCopy. _
'                                      Columns(1).Offset(rngRowsInsertCopy.Rows.Count)
'    'End With
For i = 1 To byteBlockanzahl
rngRowsCopy.Copy Range("A" & conInsertRow * i)
Next i
Set rngRowsCopy = Nothing
Set rngRowsInsertCopy = Nothing
End Sub
Gruß, MCO

Anzeige
AW: Schleife...
15.12.2015 13:59:52
Hermann
Hallo MCO,
die Variante hatte ich schon probiert, weil ich dachte mit einer Schleife
muß es funktionieren. Leider nein. Die Schleife macht nur einen Durchlauf
und dann ist Schluß.
MfG HG

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilen in Excel mit VBA mehrfach einfügen


Schritt-für-Schritt-Anleitung

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

  2. Füge ein neues Modul hinzu:

    • Rechtsklick auf „VBAProject (DeinWorkbook)“.
    • Wähle „Einfügen“ > „Modul“.
  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub ZeilenEinfügen()
       Dim rngRowsCopy As Range
       Dim rngRowsInsertCopy As Range
       Dim byteBlockanzahl As Byte
       Const conCopyRow As Long = 1
       Const conCopyRowCount As Long = 45
       Const conInsertRow As Long = 46
       byteBlockanzahl = InputBox("Bitte Anzahl eingeben.")
       Set rngRowsCopy = Rows(conCopyRow).Resize(conCopyRowCount)
       For i = 1 To byteBlockanzahl
           rngRowsCopy.Copy Destination:=Rows(conInsertRow + (i - 1) * conCopyRowCount)
       Next i
       Set rngRowsCopy = Nothing
       Set rngRowsInsertCopy = Nothing
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus:

    • Drücke ALT + F8, wähle „ZeilenEinfügen“ und klicke auf „Ausführen“.
  6. Gib die Anzahl der einzufügenden Zeilenblöcke in das Eingabefeld ein.


Häufige Fehler und Lösungen

  • Die Schleife läuft nur einmal:

    • Stelle sicher, dass die Berechnung der Zielzeile korrekt ist. Der Code sollte Rows(conInsertRow + (i - 1) * conCopyRowCount) verwenden, um die richtigen Zielzeilen zu adressieren.
  • Der Bereich kann nicht kopiert werden:

    • Überprüfe, ob im Zielbereich bereits Daten vorhanden sind. Excel lässt keine Überlappungen beim Kopieren von Zellen zu.

Alternative Methoden

Falls du keine VBA-Lösungen nutzen möchtest, kannst du auch folgende Methoden ausprobieren:

  • Manuelles Kopieren und Einfügen: Markiere den gewünschten Zeilenblock, kopiere ihn mit CTRL + C und füge ihn mit CTRL + V an der neuen Position ein. Du kannst dies mehrmals wiederholen, um die Zeilen zu duplizieren.
  • Füllen mit dem Ausfüllkästchen: Wenn du eine Zeile kopierst, kannst du das Ausfüllkästchen (kleines Quadrat in der unteren rechten Ecke der markierten Zelle) ziehen, um die Zeile mehrfach zu duplizieren.

Praktische Beispiele

Angenommen, du möchtest die ersten 45 Zeilen deines Arbeitsblatts „Tabelle1“ kopieren und in Zeilen 46 bis 136 einfügen. Der VBA-Code oben ermöglicht es dir, dies dynamisch zu machen, indem du die Anzahl der Einfügungen über eine Eingabebox festlegst.


Tipps für Profis

  • Fehlerbehandlung einfügen: Berücksichtige die Implementierung von Fehlerbehandlungen im VBA-Code, um sicherzustellen, dass der Benutzer über ungültige Eingaben informiert wird.
  • Variablen klar benennen: Eine klare Benennung von Variablen erleichtert das Verständnis des Codes und die spätere Wartung.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehr oder weniger Zeilen zu kopieren?
Du kannst die Werte von conCopyRowCount und conInsertRow im Code ändern, um die Anzahl der kopierten Zeilen oder die Zielzeile zu ändern.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der VBA-Code sollte in den meisten modernen Excel-Versionen (ab Excel 2007) funktionieren, solange VBA unterstützt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige