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

Ex­cel, alle Ver­sio­nen

Eine Auf­gabe, die ganz ein­fach scheint: Nach jed­er Zei­le soll in Ex­cel eine lee­re Zei­le einge­fügt wer­den. Nichts ein­fach­er als das …

Das geht bei drei, vier einzufü­gen­den Zei­len ja noch ganz ein­fach per Hand, aber zehn Zei­len sind nun wirk­lich die Gren­ze des Zumut­baren. Und wenn es dann noch mehr einzufü­gende Zei­len sind, dann ar­tet das in Ar­beit aus.  😎 Da bie­tet sich förm­lich der Ein­satz ei­nes Ma­kros an. Die­ses nimmt Ih­nen die Ar­beit kom­plett ab. Bin­den Sie das fol­gende Ma­kro in die ent­spre­chende Ta­bel­le (oder ein getren­ntes Mod­ul) ein. Wie das geht, er­fah­ren Sie hier.

In der ers­ten Ver­sion die­ser Auf­gabe wur­de im ge­sam­ten Daten­bere­ich eine Leer­zei­le einge­fügt. Hier in die­sem Teil geht es dar­um, nur in ei­nem aus­gewählten, ei­nem selek­tierten, zusam­men­hän­gen­den  Bere­ich ober­halb jed­er der mar­kier­ten Zei­len eine Leer­zei­le ein­zufügen. Da­bei ist es uner­he­blich, in welch­er Spal­te die Mar­kie­rung, die Selek­tion vor­ge­nom­men wor­den ist. Es reicht eine Spal­te, es dür­fen aber auch die ge­sam­ten Zei­len sein.

Hin­weis: Die Darstel­lung auf Ih­rem Bild­schirm weicht in man­chen Fäl­len vom Code in der Da­tei ab, das ist ohne Rel­e­vanz und nur der Op­tik we­gen.

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

Die­ses Ma­kro prüft auch ab, ob genü­gend Zei­len zur Ver­fü­gung ste­hen. Wenn die Daten­zeilen mehr als 50% der ver­füg­baren Zei­len ein­nehmen, dann wird eine ent­spre­chen­de Fehler­mel­dung aus­gegeben.

Hin­weis: Bere­its vorhan­dene Leer­zei­len wer­den als ganz nor­male Daten­zeilen behan­delt, es wird also nicht ge­prüft, ob in der jew­eils ak­tu­el­len Zei­le Dat­en ste­hen oder nicht. – Zum tes­ten ste­ht Ih­nen eine Ex­cel-Da­tei (im 2007er-For­mat) hier zur Ver­fü­gung; den rei­nen VBA-Code kön­nen Sie hier als gepack­te *.zip-Da­tei mit der *.bas (rein­er Text) und ein­er *.cls (Text, zum direk­ten Im­port) herun­ter­laden und dann in Ihre Da­tei ein­fü­gen.

▲ nach oben …

Hat Ih­nen der Bei­trag ge­fal­len?
Er­leich­tert die­ser Bei­trag Ihre Ar­beit?

Dann wür­de ich mich über ei­nen Bei­trag Ihrer­seits z.B. 2,00  freu­en …

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