Zeilen mit Inhalt kopieren

Nur Zeilen mit einem beliebigen Inhalt kopieren

Die Aufgabe ist klar: Es sollen ausschließlich Zeilen in ein anderes Tabellenblatt kopiert werden, die irgend einen Inhalt haben. Das können Werte oder Formeln sein. Prinzipiell gibt es zwei Wege: „Zu Fuß“ oder per VBA bzw. Makro. Für beide Wege finden Sie eine Lösung in dieser Muster-Mappe.

Ohne VBA

Bezogen auf das Arbeitsblatt Tabelle1 der Muster-Mappe fügen Sie vor der Spalte A eine neue Spalte ein. Das geht am einfachsten, wenn Sie die komplette Spalte A markieren und dann per Rechtsklick den Punkt Zellen einfügen. Fügen Sie nun in A1 diese Formel ein: =ANZAHL2(B1:XFD1)

Damit Sie wissen, welches die letzte Zeile ist, einfach einmal die Tastenkombination StrgEnde nutzen und die letzte Zelle unten|rechts ist markiert. Kopieren Sie nun die Formel aus A1 bis zur letzten Zeile hinunter. Das kann auch durch ziehen passieren. Jetzt filtern Sie per AutoFilter alle Werte aus Spalte A, welche keine Null enthalten, indem Sie das Häkchen bei der Null entfernen.

Jetzt markieren Sie den gefilterten Bereich und kopieren ihn beispielsweise mit der Tastenkombination StrgC. Sollte in A1 eine Null stehen, dann markieren Sie nicht diese erste Zeile für das kopieren. Nun wechseln Sie in die Ziel-Tabelle und fügen den Inhalt der Zwischenablage an gewünschter Position ein. Anschließend können Sie noch den AutoFilter aus der Tabelle1 entfernen. In Tabelle1 (2) sind schon das einfügen der Spalte und der AutoFilter realisiert, falls Sie sich auf das kopieren konzentrieren wollen. Beachten Sie bitte den Hinweis am Ende dieses Beitrages.

Mit VBA/Makro

Unter der Voraussetzung, dass alle Zeilen mit beliebigem Inhalt von Tabelle1 in die jeweils erste Zeile der Tabelle2 kopiert werden sollen, geht das prima mit einem Makro. Zum ausprobieren einfach einmal AltF8 und das einzige Makro in der Auflistung ausführen. Hier nun der unkommentierte 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 Original-Code finden Sie natürlich auch in der Muster-Datei.

Hinweis: Ist Ihnen aufgefallen, dass in beiden vorgestellten Versionen eine Zeile mit kopiert worden ist, die scheinbar doch leer ist? Die Betonung liegt auf „scheinbar“, denn die Zeile ist in der Tat nicht leer. Schauen Sie sich doch einmal in der Editierzeile den Inhalt von F3 an …

▲ nach oben …

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