Leerzeilen einfügen (1)

Xtract: In Excel per Makro/VBA nach jed­er Zeile eine oder eine definierte Zahl von Leerzeilen ein­fü­gen. Ein­schließlich Prü­fung, ob die max­i­mal ver­füg­bare Zeilen­zahl nicht über­schrit­ten wird.

Nach jeder Zeile eine Leerzeile einfügen

Excel, alle Ver­sio­nen

Eine Auf­gabe, die ganz ein­fach scheint: Nach jed­er Zeile soll in Excel eine leere Zeile einge­fügt wer­den. Nichts ein­fach­er als das …

Das geht bei drei, vier Daten­sätzen (also existieren­den Zeilen) ja noch ganz ein­fach per Hand, aber zehn Daten­sätze sind nun wirk­lich die Gren­ze des Zumut­baren. Und wenn es dann noch mehr Dat­en und/oder auch jew­eils einzufü­gende Zeilen sind, dann artet das in Arbeit aus.  😉 Da bietet sich förm­lich der Ein­satz eines Makros (VBA) an. Dieses nimmt Ihnen die Arbeit dann kom­plett ab. Binden Sie das fol­gende Makro in die entsprechende Tabelle (oder ein getren­ntes Mod­ul) ein. Wie das geht, erfahren Sie hier.

Hin­weis: Die Darstel­lung auf Ihrem Bild­schirm weicht in manchen Fällen vom Code in der Datei ab, das ist ohne Rel­e­vanz 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 Ver­fü­gung ste­hen. Wenn die Daten­zeilen plus die Leerzeilen mehr als die ver­füg­baren Zeilen ein­nehmen wür­den, dann wird eine entsprechende Fehler­mel­dung aus­gegeben und es geschieht nichts. In dem Fall entwed­er die Daten­sätze und/oder die Anzahl der einzufü­gen­den Zeilen reduzieren.

Hin­weise: Bereist vorhan­dene Leerzeilen wer­den als ganz nor­male Daten­zeilen behan­delt, es wird also nicht geprüft, ob in der jew­eils aktuellen Zeile Dat­en ste­hen oder nicht. – Zum testen ste­ht Ihnen eine Excel-Datei (im 2007er-For­mat) hier zur Ver­fü­gung; den reinen VBA-Code kön­nen Sie hier als gepack­te *.zip-Datei mit der *.txt (rein­er Text) und ein­er *.cls (Text, zum direk­ten Import) herun­ter­laden und dann in Ihre Datei ein­fü­gen.

Es gibt Puris­ten welche die Mei­n­ung vertreten, dass eine Tabelle „ohne Aus­nah­men und aus welchem Grund auch immer” keine kom­plett leeren Zeilen enthal­ten darf. Na ja, es kann schon Gründe geben, erst ein­mal Leerzeilen einzufü­gen. Wenn es sich jedoch um eine „Intel­li­gente Tabelle” bzw. „Liste” han­delt, dann gehören in der Tat keine kom­plet­ten Leerzeilen hinein, das würde die Funk­tion­al­ität beein­trächti­gen. Auf der anderen Seite gilt: Wenn auch nur in ein­er Spalte eine Formel ist, würde diese bei ein­er Liste automa­tisch in die erzeugten Leerzeilen einge­fügt wer­den, wom­it diese dann auch nicht mehr kom­plett leer sind.

Dieser Beitrag wurde Anfang März 2016 im Text und im Code aktu­al­isiert.

▲ nach oben …

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

Dann würde ich mich über einen Beitrag Ihrer­seits 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.