Zeilen mit Inhalt kopieren

Nur Zeilen mit einem beliebigen Inhalt kopieren

Die Auf­gabe ist klar: Es sollen auss­chließlich Zeilen in ein anderes Tabel­len­blatt kopiert wer­den, die irgend einen Inhalt haben. Das kön­nen Werte oder Formeln sein. Prinzip­iell gibt es zwei Wege: „Zu Fuß” oder per VBA bzw. Makro. Für bei­de Wege find­en Sie eine Lösung in dieser Muster-Mappe.

Ohne VBA

Bezo­gen auf das Arbeits­blatt Tabelle1 der Muster-Mappe fügen Sie vor der Spalte A eine neue Spalte ein. Das geht am ein­fach­sten, wenn Sie die kom­plette Spalte A markieren und dann per Recht­sklick den Punkt Zellen ein­fü­gen. Fügen Sie nun in A1 diese Formel ein: =ANZAHL2(B1:XFD1)

Damit Sie wis­sen, welch­es die let­zte Zeile ist, ein­fach ein­mal die Tas­tenkom­bi­na­tion StrgEnde nutzen und die let­zte Zelle unten|rechts ist markiert. Kopieren Sie nun die Formel aus A1 bis zur let­zten Zeile hin­unter. Das kann auch durch ziehen passieren. Jet­zt fil­tern Sie per Aut­oFil­ter alle Werte aus Spalte A, welche keine Null enthal­ten, indem Sie das Häkchen bei der Null ent­fer­nen.

Jet­zt markieren Sie den gefilterten Bere­ich und kopieren ihn beispiel­sweise mit der Tas­tenkom­bi­na­tion StrgC. Sollte in A1 eine Null ste­hen, dann markieren Sie nicht diese erste Zeile für das kopieren. Nun wech­seln Sie in die Ziel-Tabelle und fügen den Inhalt der Zwis­chen­ablage an gewün­schter Posi­tion ein. Anschließend kön­nen Sie noch den Aut­oFil­ter aus der Tabelle1 ent­fer­nen. In Tabelle1 (2) sind schon das ein­fü­gen der Spalte und der Aut­oFil­ter real­isiert, falls Sie sich auf das kopieren konzen­tri­eren wollen. Beacht­en Sie bitte den Hin­weis am Ende dieses Beitrages.

Mit VBA/Makro

Unter der Voraus­set­zung, dass alle Zeilen mit beliebigem Inhalt von Tabelle1 in die jew­eils erste Zeile der Tabelle2 kopiert wer­den sollen, geht das pri­ma mit einem Makro. Zum aus­pro­bieren ein­fach ein­mal AltF8 und das einzige Makro in der Auflis­tung aus­führen. Hier nun der unkom­men­tierte Code:

Option Explicit

Sub NurMitInhaltKopieren()
'Nur Zellen mit Inhalt in ein anderes Blatt kopieren
   Dim lRowSrc As Long, fFreeDst As Long
   Dim lColSrc As Integer
   Dim wksSrc As WorkSheet, wksDst As WorkSheet
   Dim ZeSrc As Long, ZeDst As Long
   Dim rngZe As Range
   
   With ActiveWorkbook
      Set wksSrc = .Sheets("Tabelle1")
      Set wksDst = .Sheets("Tabelle2")
   End With
   With wksSrc
      lRowSrc = .Cells.Find(What:="*", SearchOrder:=xlByRows, _
       SearchDirection:=xlPrevious).Row
      lColSrc = .Cells.Find(What:="*", SearchOrder:=xlByColumns, _
       SearchDirection:=xlPrevious).Column
   End With
   
   'Mehr|weniger Code
With wksDst If WorksheetFunction.CountA(.Cells) = 0 Then fFreeDst = 1 Else fFreeDst = .Cells.Find(What:="*", SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row + 1 End If End With On Error GoTo ErrorHandler With wksSrc For ZeSrc = 1 To lRowSrc Set rngZe = .Range(.Cells(ZeSrc, 1), .Cells(ZeSrc, lColSrc)) If WorksheetFunction.CountA(rngZe) > 0 Then rngZe.Copy wksDst.Cells(fFreeDst, 1) fFreeDst = fFreeDst + 1 End If Next ZeSrc End With ErrorHandler: If Err.Number <> 0 Then MsgBox "Fehler Nummer: " & Err.Number & vbCrLf _ & "Fehler: " & Err.Description End If End Sub

Den Orig­i­nal-Code find­en Sie natür­lich auch in der Muster-Datei.

Hin­weis: Ist Ihnen aufge­fall­en, dass in bei­den vorgestell­ten Ver­sio­nen eine Zeile mit kopiert wor­den ist, die schein­bar doch leer ist? Die Beto­nung liegt auf „schein­bar”, denn die Zeile ist in der Tat nicht leer. Schauen Sie sich doch ein­mal in der Edi­tierzeile den Inhalt von F3 an …

[NachOben­Let­zte Verweis=„T&T: Belegte Zeilen kopieren”]
Dieser Beitrag wurde unter Mit VBA/Makro, Musterlösungen, Ohne Makro/VBA abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.