Leerzeilen einfügen (1)

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.

▲ nach oben …

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.

▲ nach oben …

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrerseits z.B. 2,00  freuen …

Dieser Beitrag wurde unter Downloads, Mit VBA/Makro, Musterlösungen, Tabelle und Zelle abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.