Xtract: In Excel per Makro/VBA nach jeder Zeile eine oder eine definierte Zahl von Leerzeilen einfügen. Einschließlich Prüfung, ob die maximal verfügbare Zeilenzahl nicht überschritten wird.
Nach jeder Zeile eine Leerzeile einfügen
Excel, alle Versionen
Eine Aufgabe, die ganz einfach scheint: Nach jeder Zeile soll in Excel eine leere Zeile eingefügt werden. Nichts einfacher als das …
Das geht bei drei, vier Datensätzen (also existierenden Zeilen) ja noch ganz einfach per Hand, aber zehn Datensätze sind nun wirklich die Grenze des Zumutbaren. Und wenn es dann noch mehr Daten und/oder auch jeweils einzufügende Zeilen sind, dann artet das in Arbeit aus. 😉 Da bietet sich förmlich der Einsatz eines Makros (VBA) an. Dieses nimmt Ihnen die Arbeit dann komplett ab. Binden Sie das folgende Makro in die entsprechende Tabelle (oder ein getrenntes Modul) ein. Wie das geht, erfahren Sie hier.
Hinweis: Die Darstellung auf Ihrem Bildschirm weicht in manchen Fällen vom Code in der Datei ab, das ist ohne Relevanz und nur der Optik wegen.
Option Explicit Sub ZeilenEinfuegen() ' Hinweis: Die 1. Zeile wird stets OBERHALB der Variablen FirstDataRow eingefügt Dim AnzRowsSel As Long, RowsInWks As Long, MaxRows As Long Dim LastDataRow As Long, FirstDataRow As Long, FreeRows As Long Dim i As Long, z As Long, AnzEinZe As Integer, CalcStatus As Variant With ActiveSheet RowsInWks = .Rows.Count 'Maximale/alle Zeilen des WorkSheets LastDataRow = .Cells(RowsInWks, "A").End(xlUp).Row 'Letzte Datenzeile End With FirstDataRow = 2 'Siehe Hinweis oben, bei Bedarf apassen AnzEinZe = 1 'Anzahl der einzufügenden Zeilen FreeRows = RowsInWks - LastDataRow 'Noch freie Zeilen MaxRows = FreeRows / (AnzEinZe + 1) 'Die Hälfte davon AnzRowsSel = LastDataRow 'Hierüber wird die erste Leerzeile eingefügt, bei Bedarf ändern On Error GoTo ErrorHandler With Application .ScreenUpdating = False 'Wegen Schnelligkeit und Flimmern CalcStatus = .Calculation .Calculation = xlCalculationManual End With If MaxRows >= AnzRowsSel Then For i = LastDataRow To FirstDataRow Step -1 Rows(i).EntireRow.Resize(AnzEinZe).Insert Next i Else 'Es wären zu viele Zeilen MsgBox "Zu viele Datenzeilen," & vbCrLf _ & "ein Einfügen von Leerzeilen ist nicht möglich.", _ vbCritical + vbOKOnly, "Fehler!" End If ErrorHandler: With Application .Calculation = CalcStatus .ScreenUpdating = True End With If Err.Number <> 0 Then MsgBox "Fehler Nr.: " & Err.Number & vbCrLf & Err.Description End Sub
Dieses Makro prüft auch ab, ob genügend Zeilen zur Verfügung stehen. Wenn die Datenzeilen plus die Leerzeilen mehr als die verfügbaren Zeilen einnehmen würden, dann wird eine entsprechende Fehlermeldung ausgegeben und es geschieht nichts. In dem Fall entweder die Datensätze und/oder die Anzahl der einzufügenden Zeilen reduzieren.
Hinweise: Bereist vorhandene Leerzeilen werden als ganz normale Datenzeilen behandelt, es wird also nicht geprüft, ob in der jeweils aktuellen Zeile Daten stehen oder nicht. – Zum testen steht Ihnen eine Excel-Datei (im 2007er-Format) hier zur Verfügung; den reinen VBA-Code können Sie hier als gepackte *.zip-Datei mit der *.txt (reiner Text) und einer *.cls (Text, zum direkten Import) herunterladen und dann in Ihre Datei einfügen.
Es gibt Puristen welche die Meinung vertreten, dass eine Tabelle „ohne Ausnahmen und aus welchem Grund auch immer” keine komplett leeren Zeilen enthalten darf. Na ja, es kann schon Gründe geben, erst einmal Leerzeilen einzufügen. Wenn es sich jedoch um eine „Intelligente Tabelle” bzw. „Liste” handelt, dann gehören in der Tat keine kompletten Leerzeilen hinein, das würde die Funktionalität beeinträchtigen. Auf der anderen Seite gilt: Wenn auch nur in einer Spalte eine Formel ist, würde diese bei einer Liste automatisch in die erzeugten Leerzeilen eingefügt werden, womit diese dann auch nicht mehr komplett leer sind.
Dieser Beitrag wurde Anfang März 2016 im Text und im Code aktualisiert.
Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?
Dann würde ich mich über einen Beitrag Ihrerseits z.B. 2,00 € freuen …