Leerzeilen einfügen (2)

Xtract: In Excel in einem markierten/selektierten Bere­ich eine definierte Zahl von Leerzeilen ein­fü­gen. VBA/Makros müssen erlaubt sein.

Leerzeilen nur in einem markieren Bereich 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 einzufü­gen­den Zeilen ja noch ganz ein­fach per Hand, aber zehn Zeilen sind nun wirk­lich die Gren­ze des Zumut­baren. Und wenn es dann noch mehr einzufü­gende Zeilen sind, dann artet das in Arbeit aus.  😎 Da bietet sich förm­lich der Ein­satz eines Makros an. Dieses nimmt Ihnen die Arbeit kom­plett ab. Binden Sie das fol­gende Makro in die ent­spre­chende Tabelle (oder ein getren­ntes Mod­ul) ein. Wie das geht, erfahren Sie hier.

In der ersten Ver­sion dieser Auf­gabe wurde im gesamten Daten­bere­ich eine Leerzeile einge­fügt. Hier in diesem Teil geht es darum, nur in einem aus­gewählten, einem selek­tierten, zusam­men­hän­gen­den  Bere­ich ober­halb jed­er der markierten Zeilen eine Leerzeile ein­zufügen. Dabei ist es uner­he­blich, in welch­er Spalte die Markierung, die Selek­tion vor­ge­nom­men wor­den ist. Es reicht eine Spalte, es dür­fen aber auch die gesamten Zeilen sein.

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 ZeilenEinfuegenBereich()
' Hinweis: Die 1. Zeile wird stets OBERHALB
' der Markierung eingefügt
   Dim lngAnzRows As Long, lngMaxRow As Long
   Dim lngAnzRowsSel As Long, lngAnzRowsWks As Long
   Dim lngLastDataRow As Long, lngFirstDataRow As Long, lngFreeRows As Long
   Dim i As Long
   Dim bolPartOnly As Boolean
   
   'Maximale/alle Zeilen des WorkSheets ermitteln
   lngAnzRowsWks = Rows.Count
   'Letzte Datenzeile ermitteln
   lngLastDataRow = ActiveSheet.Cells(lngAnzRowsWks, 1).End(xlUp).Row
   
   'Hier wird die erste Leerzeile eingefügt, falls nicht
   'mehrere Zeilen markiert sind. Bei Bedarf ändern
   lngFirstDataRow = 2
   'Noch freie Zeilen feststellen
   lngFreeRows = lngAnzRowsWks - lngLastDataRow
   lngMaxRow = lngFreeRows / 2 'Die Hälfte davon
   lngAnzRowsSel = lngLastDataRow
   
   'Prüfen, ob mehrere Zeilen zusammenhängend markiert sind
   If Selection.Rows.Count > 1 Then
      If MsgBox(lngAnzRowsSel & " Zeilen sind " _
       & "zusammenhängend markiert, " & vbCrLf _
       & "sollen nur in diesem "  _
       &"Bereich Leerzeilen eingefügt werden?", _
       vbYesNo, "Bereich festlegen") = vbYes Then
         bolPartOnly = True
         lngAnzRowsSel = Selection.Rows.Count
         lngFirstDataRow = Selection.Row
         lngAnzRows = Selection.Rows.Count
         lngLastDataRow = lngFirstDataRow + lngAnzRows - 1
         End If
   End If 
   
   On Error GoTo Fehler
   'Wegen Schnelligkeit und Flimmern
   Application.ScreenUpdating = False
   If lngMaxRow >= lngAnzRowsSel Then
      For i = lngLastDataRow To lngFirstDataRow Step -1
         Rows(i).EntireRow.Insert
      Next i
      ' Falls nach der letzten markierten Zeile
      ' KEINE Leerzeile eingefügt werden soll,
      ' die folgende Zeile auskommentieren oder löschen
      If bolPartOnly Then Rows(lngLastDataRow + _
       lngAnzRowsSel + 1).EntireRow.Insert
      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
Fehler:
   Application.ScreenUpdating = True
End Sub

▲ nach oben …

Dieses Makro prüft auch ab, ob genü­gend Zeilen zur Ver­fü­gung ste­hen. Wenn die Daten­zeilen mehr als 50% der ver­füg­baren Zeilen ein­nehmen, dann wird eine entsprechende Fehler­mel­dung aus­gegeben.

Hin­weis: Bere­its 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 *.bas (rein­er Text) und ein­er *.cls (Text, zum direk­ten Import) herun­ter­laden und dann in Ihre Datei ein­fü­gen.

▲ 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.